09_P83~P88TheAnimationBlueprint
83the Animation Blueprint动画蓝图
Breathing Life into echo
给角色创建动画蓝图
一共是两点
1、我们需要在动画蓝图中获取角色的移动速度
2、我们需要在动画蓝图中设置一个状态机 static machine,状态机里面,通过判断移动速度,设置idle和run两种状态的切换
1、动画蓝图创建和角色数据初始化
新建一个动画蓝图

进入AnimGraph,创建一个状态机state machine,命名为Ground Locomotion


然后我们事件图表中,初始化动画,需要获取角色bp_testCharacter的角色移动信息charactermovement
首先创建事件节点

创建一个类型为BP_TestCharacter的变量

通过“尝试获取pawn拥有者,转换为bp_testCharacter类型,赋值给新建的character变量,
然后从character中获取角色移动组件character movement的信息,并将其结果提升为变量
整体蓝图如下

接着我们通过”事件蓝图更新动画“事件 获取character movement中,移动速度velocity的信息,这里我们只需要获得xy轴上的速度信息

获取XY方向上 向量的长度(也就是速度)

将获得的结果类型提升为变量
整体蓝图如下

然后我们回到状态机这里
双击状态机
新建两个状态idle 、 run,并关联run至idle的关系

进入idle 和run 添加动画


然后进入两个过渡规则,通过GroundSpeed添加判断条件



最后编译保存 执行一下看看结果,角色就能在地图中“跑起来”了
并且在速度为0和不为0的时候有各自的动画表现
84 the anim instanceanim实例
the c++ class for the animation blueprint动画蓝图的c++类
创建一个AnimInstance类

删除原有动画蓝图中的节点和变量
在动画蓝图的类设置里面 修改父类为创建的这个类

并在动画状态机中,替换之前的变量GroundSpeed
85Jumping跳
Creating Action Mappings创建动作映射
蓝图实现:创建一个操作映射

在character蓝图 bp_testCharactor中,输入jump 找到jump的操作事件
并创建一个jump函数


C++实现:
依然需要在项目设置中创建一个操作映射
然后在SetupPlayerInputComponent中绑定jump操作,并使用ACharacter类中的Jump方法
86Jump Animations跳的动画
Adding Jump States添加跳转状态
进入动画蓝图中,在AnimGraph中,断开原来GroundLocomotion的链接
从GroundLocomotion引出cached poses,创建一个状态缓存,命名为GroundLocomotion


然后重新创建一个状态机 MainMachine

进入之后添加节点

用之前C++创建的isFalling判断是否在空中
OnGround->InAir

InAir->Land

Land->OnGround

添加判断语句,获取剩余的跳跃动画时间,如果移动速度大于0,则立刻切换到OnGround状态

这里的循环动画记得在跳跃状态时,需要关掉

从Land到OnGround的规则属性上,需要勾选这个,这样才能在落地动作完成后,自动过渡到OnGround,否则就会一直播放落地动作

87Inverse Kinematics逆运动学
Fine-Truning our Character's Animations微调我们的角色动画
太难了····
88小结