近期浏览UE的CitySample(黑客帝国Demo),发现有不少逻辑用到了StateTree学习一下,StateTree是多层状态机实现,以组件的形式直接挂载在蓝图中运行。
与平时常见的一些FSM库不同,StateTree并不会返回给外界当前的状态是什么,毕竟嵌套状态返回的信息并不直观,使用者可以通过UE的Tags标签来标记当前的状态或是别的方法。
下面就来简单讲讲如何使用,编辑器版本是UE5.3。
1.首先安装插件State Tree:
2.右键创建State Tree对象,创建类型选择StateTreeComponent:
3.创建好后先不急着配置StateTree文件,先创建一个自定义任务。右键创建蓝图类,类名搜索关键字State Tree,创建类型如下:
注:State Tree的每一个状态上都可以挂载Task,状态进入由Condition条件控制,状态跳转由Transiton控制。
4.简单编写Task逻辑:
5.双击打开StateTree文件,点击Add Statet添加State1,并添加自定义Task与延迟,设置一个自身传递的Transitions过渡。
6.创建一个角色,用于挂载StateTree并执行状态机。
7.为新创建的角色蓝图添加StateTree组件,赋上之前创建的StateTree。
8.StateTree组件会自动执行,不需要蓝图节点的调用,拖入场景执行,可见Log正常打印。