学习做动画1.简易行走
1.创建一个动画蓝图,命名为ABP_CharacterBase
然后在里面创建一个状态机"StateMachine"
进入状态机,添加状态
①:Idle->Start,表示为玩家从”静止“到”移动“,判断条件为角色当前拥有“加速度”(速度发生变化)
②:Start->Cycle,表示为玩家当前的速度等于当前最大移动速度,判断条件为角色当前没有”加速度“(加速度值仍不为0,但是速度的值不变了)
③:Cycle->Stop/Start->Stop,这两样都是玩家停止输入(玩家在输入时才有加速度。此时加速度为0)
④:Stop->Idle,此时角色的速度为0,
2。接下来就是获取角色的一些数据,包括速度等。
重载函数“蓝图线程安全更新动画”
再新建一个函数,用于更新角色的速度,命名为UpdateVelocityData
然后在这个函数内,细节面板里勾选“线程安全“,这样才能被刚刚重载的函数使用
再新建一个函数UpdateRotationData,用来更新角色的旋转
再新建一个函数,用于更新加速度
3。在函数UpdateRotationData内,通过节点PropertyAccess设置角色旋转
在函数UpdateVelocityData内,创建节点PropertyAccess(属性存取)
将其绑定到角色的速度上
最后这样子连
接下来设置加速度,这里新建一个纯函数GetMovementComponent,这里的返回节点的名字一定要改为ReturnValue(不能有空格)
然后进入更新加速度的函数UpdateAccelerationData,这时我们就能通过刚刚创建的纯函数(返回的是移动组件)获取到移动组件内的数据
然后回到重载函数BlueprintThreadSafeUpdateAnimation内,将三个安全线程连接
好了,接下来可以进入状态机写状态转换条件了
4。
①:Idle->Start:
选择过渡条件,设置为共享,命名为ToStart
②:Start->Cycle
需要把这个勾选上,表示当Start的动画播放完后,将会自动跳转到Cycle的动画
③:Cucle->Stop
选择过渡条件,设置为共享,命名为ToStop
④Stop->Idle
同②
⑤Stop->Start,使用共享条件ToStart
Start->Stop,同样的操作
5。选择Idle->Start的过渡规则,选择FastFeet(此处表示脚比身体的其他部位的先混合,根据骨架上的一个混合权重进行配置)(需要进行创建的话,在骨骼界面的齿轮设置里创建关于时间的混合描述文件,命名为fastfeet,接着按照同样手法打开lyra谷歌的混合描述文件时间,对比他们的权重对创建的混合权重进行修改即可)在此处创建时间混合权重,命名为fastfeet即可(这一步对没有混合描述的做)
这里的混合权重差不多是下半肢都是0.5,上半肢都是1
6。设置好后,我们需要在状态里添加对应的动画。但是我们在此处需要另外两个动画蓝图。需要创建一个动画层接口与一个动画蓝图。
新建一个动画层接口,命名为ALI_AnimLayerInterface
新建四个动画层
创建好后,回到动画蓝图Base内,添加刚刚创建好的接口,此时会出现动画层内的四个动画层
然后,打开Idle,将动画层的Idle拖进去,连接
其他的也是一样。这样每一个状态都有了对应的动画层
7。创建一个动画蓝图,用于实现动画的逻辑(eg:动态切换,距离匹配等)(Layer动画蓝图负责动画的处理,基础动画蓝图负责数值的获取和计算)
打开后,同样需要继承ALI接口
我们需要在这个动画蓝图内处理动画的播放。
打开Idle,创建一个“动画序列”的变量,命名为Idle
添加节点SequencePlayer(序列播放器)
点击它,然后在细节面板内绑定刚刚创建好的变量
这样子就设置好了。
然后再创建三个跟Idle一样的变量
接下来设置其他的动画层。
打开Cycle。
打开Start
打开Stop
(以上需要注意的是,Start与Stop需要将循环动画设置为false)
此时一个负责处理动画的动画蓝图父类创建完成。我们创建其子类,在子类里给这些变量赋值。
这里创建一个手枪的动画蓝图
打开后发现,我们可以在此设置对应的动画
(这里我悄悄去换了个骨骼)
这样子就已经把状态机内的四个动画设置好了。
8。打开玩家的角色蓝图,在BeginPlay的运行节点内,添加新的节点"LinkAnimClassLayers"(关联动画类图层)
这个节点可以使得我们角色内设置的动画蓝图通过接口使用另外创建的动画蓝图。
这是我们设置的动画蓝图
这是我们另外创建的动画蓝图的父类,我们在其子类内设置了具体的动画,再将他们关联起来。使得角色可以使用子类的动画。
将来我们可以在玩家蓝图内,进行更换武器等操作时,就可进行动画层关联即可。
9。接下来我们需要对所有要用到的动画进行批量化处理打开根运动很强制根锁定