UE5入门第四、五周总结:动画蓝图与行为树

动画蓝图

AnimBluePrint(ABP,动画蓝图),创建动画——动画蓝图,创建时需要绑定唯一对应的骨骼。

事前准备

1.角色中的骨骼网格体默认设置中关联动画蓝图。
2.根据需要,在角色蓝图的Movement中调整转身效果。
3.若要做第三人称的角色,连接角色的弹簧臂要设置接收Controller的Yaw值。

状态机

  1. 在AnimGraph界面,新建StateMachine(状态机),在状态机中拖入动画资产中的文件,生成状态。
  2. 常用的动画资产就是角色动画文件和混合空间(BlendSpace)。
  3. 状态机中常用的动画资产几乎都需要勾选looping,具体情况再做分析。
  4. 在同一个状态机中的“状态”们可以根据给定的条件判断是否互相变化,常用ABP中的变量值作为判断依据。
  5. 让状态机控制角色动画需要输出状态机当前的状态。但在比较复杂的ABP中,很难直接把所有的“状态”放进一个状态机输出。所以,要灵活的使用“Save Pose”功能。这个功能可以理解为保存当前帧角色的“动作”,也就是骨骼网格体在某一帧的特殊“状态”。在引入Montage后,这个节点的作用将被放大。调用SavePose的方法可以用右键直接输入节点名就可以调出“该状态机在这一帧保存的动作”。
  6. TimeRemaining节点,在状态机的切换状态条件中常见,可以输出当前播放动画的剩余时间。

动画蒙太奇

  1. 创建AnimMontage(动画蒙太奇),创建时必须绑定骨骼,可以把骨骼的动画资产从资产浏览页面拖入蒙太奇文件中成为动画片段。
  2. 蒙太奇必须设置插槽后才能使用,在AnimGraph中输入slot调用默认插槽后在细节面板改变插槽名称来调用对应的蒙太奇。蒙太奇插槽有一个输入接口和一个输出接口,建议输入端连接在“可能会出现该蒙太奇动画的状态所对应的状态机”,输出端及时保存,多个蒙太奇插槽不互相冲突,可以直接串联,若在同一帧同时调用多个蒙太奇,会输出最右侧的蒙太奇(废话)。在蒙太奇文件中,可以“动画插槽管理”窗口新增插槽组和新插槽。
  3. 使用PlayMontage调用Montage,也就是在AnimGraph中立刻执行指定插槽里的蒙太奇。结合通知、通知蓝图后的蒙太奇功能十分强大,放在角色蓝图和动画蓝图中都可以。但由于状态机使用的变量都在动画蓝图中,所以在加动画互斥锁时一定要及时调整动画蓝图中的变量。
  4. 蒙太奇播放完毕后会让角色回到原本的状态, 包括角色在蒙太奇期间产生的位移也会返回原点。若使用的动画支持根位移,可以在默认设置中勾选使用根运动,但这还不够,必须在角色蓝图中设置抓取根运动,把类型设置为From Montage。不推荐抓取状态机中动画的根运动,但不是绝对。
  5. 一个动画蒙太奇中可以有多个动画片段。在PlayMontage节点中设置StartSectionName可以选择开始播放的片段,None默认从第一个开始播放。

动画混合

  1. 在AnimGraph中只存储一种状态机,只保存一种Pose然后输出是不现实的。动画混合节点Blend Poses by Bool(Int)提供了切换输出的手段。设置的时间分别对应从上到下,从下到上的动画融合时间,在这期间输出的动作是虚幻内置的动作融合器融合出的形态。
  2. Layered by Bones节点,按骨骼对动画进行分层。必须在节点的细节面板中输入用于分层的骨骼(复制骨骼名称)和深度,深度是以此骨骼为开始的骨骼数。用这个节点,可以实现以骨骼为基础的动画的分层,比如走砍(上下半身各自运动)。
  3. Apply Additive,附加动画,附加的动画必须是“附加类型动画”。可以在正常的动画资产中改变 某选项 设置为附加动画。

动画通知

  1. 当动画播放到某一帧时,发出一个“通知”,这个通知可以是事件,也可以是蓝图。在动画资产中编辑栏的通知行编辑。
  2. 动画通知可以通过调用动画通知蓝图(AnimNotifyBP)的形式来创建。动画通知蓝图可以直接在资产界面创建。相较于用事件的方式实现通知,动画通知蓝图更加面向对象和封装,但缺点是不能直接获得角色蓝图或是动画蓝图中的变量。
  3. 动画通知蓝图必须要有正确的输入、输出节点。

行为树

行为树、黑板

  1. 在资产浏览器中选择人工智能——行为树来创建一个新的行为树,再在相同地方创建一个黑板,行为树不能脱离黑板单独运行。在行为树的右侧设置面板中可以绑定指定的黑板。
  2. 黑板中会存储所有行为树可能会用到的数据,换句话说,黑板可以认为是行为树的一部分。行为树中需要使用的数据都从黑板中获取。
  3. 行为树可以独立存在,但必须在AIController中使用PlayBehaverTree节点与行为树绑定才能正确的使用。当然,必须把AIController绑定进入AI蓝图中才能形成行为树->AIController->AI蓝图的控制链条。
  4. 行为树的运行顺序就是树的先序遍历顺序,并以此顺序形成队列逐帧循环检测运行。
  5. 行为树中除去叶节点为Task(任务),其他的节点都由Selector或Squence组成。Selector:若子节点中有任意一项返回成功,则节点返回成功,不再继续遍历该Selector的子项,仅在遍历所有子项全部失败后返回失败。Sequence:若子项有任意一项返回失败,则节点返回失败,不再继续遍历该Sequence的子项,仅在遍历所有子项全部成功后返回成功。
  6. 装饰器:直接装在行为树的节点上的一个条件,父节点会判断是否满足装饰器上的条件来决定是否访问执行子节点,一般使用黑板中的变量值作为装饰器判断的依据。
  7. 观察器中止:可以设置当前装饰器成功或失败后,触发的事件。常见的设定有“若装饰器为假,则停止观察所有的后续节点”,凭此可以实现每帧的行为逻辑停止位置。
  8. Task节点需要在行为树中新建,会存储为Task文件,不同的行为树可以使用相同的Task文件。Task文件必须有开始节点和至少一个结束节点。开始节点在函数重载处选择Excute AI,结束节点输入Finish寻找。
  9. 由于有代码复用,那就不可避免的涉及存储问题。同一个Task被不同的行为树调用后,计算出需要存储在对应行为树黑板中的数值,必须给这个数值赋予Key值。利用Set Blackboard Value by Key节点,输入Key值或提升为变量来赋值。
  10. 黑板中可以存储Object类型的变量,需要注意的是,Object类变量可以在右侧面板“降级”,例如角色蓝图就可以从Object类一口气降级为角色蓝图类型。

AIController

  1. 绑定行为树后的AIController相当于获得了黑板,可以直接使用Get Blackboard节点,也可以用Save Value as ____ 向黑板中存储数值。
  2. AIController中的PawnSensing组件和Perception组件可以用作设定AI的感知器。前者可以动态的设置感知范围,但缺少目标进入、离开范围的时间;后者虽然不能动态的设置感知范围,但拥有On Target Percetion Update事件,而且这个事件的输出引脚功能十分齐全,建议尽量使用这个节点(除非需要动态调整感知范围)。
  3. 由于脑残程序员乱加未完成的功能,即便你按上述设置了AI Perception组件,也不会有任何作用,因为组件默认检测阵营是Enemy,但这个功能目前并没有完成,所以必须把这里设置为检测中立阵营才能检测到范围内的对象。
  4. 标签可以用作阵营标记。标签可以在所有的Actor类中设置,使用Actor Has Tag来输出一个Bool值判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值