学习高级运动系统 总结笔记
教程链接:https://www.bilibili.com/video/BV12f4y1r71N/?spm_id_from=333.337.search-card.all.click&vd_source=e777e025df7919f01dec1fd869a8899d
非常五谷延年up的感谢,真的是难得的学习资料,让我受益非常多,对游戏运动系统有了更多、更深刻的理解和认识!
项目导入ALSV
-
首先创建ASLV项目

-
迁移到目标项目

-
选择目标项目的Content文件夹
AimOffset
本质上是BlendSpace的子类

做了进一步的封装约束:
- 使用动画片段,要求是 旋转网格体叠加

网格体旋转作用示意图:

相比局部空间旋转,网格体旋转更加合理
蓝图中使用AimOffset和BlendSpace有所不同

骨骼
骨骼变换(Transform Bone)
给指定骨骼添加变换,还可以设置添加的方式是替换还是叠加

双骨骼IK
IK和FK

双骨骼IK就是指 移动一个结点,影响两个骨骼,两个骨骼一共涉及三个顶点,其中起点位置不变、终点位置自定义,最后再调整中点位置(中点位置影响双骨骼所在平面,又称为极向量PoleVector)

算法原理

混合
同步组
用来解决动画混合时,两个动画时常不一致的状况

还会对动画的共有标记进行同步,例如领导者位于"左脚落下"标记与“右脚落下”标记之间25%的位置,则跟随者也会同步到"左脚落下"与"右脚落下"之间25%的位置


蒙太奇
主要作用是插入动画,并在播放完动画后,恢复原本的动画逻辑,如果直接使用PlayAnim,则播放完后就卡在动画结尾了,即

故需要改为PlayMontage,参数包括MontageAsset, Starting Section等
Montage to Play: 创建的Montage资产Starting Section: 播放的Section名

同时Montage还提供了复合动画控制,比如多段section循环、停止、跳转等功能


曲线
材质与变形
动画通知
- 动画中右键,创建通知
- 创建蓝图类,继承自
AnimNotify(方便通知逻辑复用); 重载父类的ReceivedNotify函数即可
通知(粒子、音效)
通知状态(拖尾)
根运动
很多时候使用In-Place动画,通过程序控制位移,没有问题;
但是当需要使用动画位移时,会出现根留在原地的状况,比如飞扑动作,还是用动画位移更加贴合;
动画播放完,回到起点

动画没有发生碰撞

概括而言,跟运动就是让动画位移带动角色蓝图实例位移

启动跟运动: 根随着动画进行运动强制根锁定: 动画人物始终位于根处,如果未开启根运动,则动画变为In-Place
过渡规则 和 管道
过度规则
定义进行过度的条件
管道 Conduit
视为无动画的状态State,用于动画蓝图的分流

动画修改器
输入与移动

输入映射
Project Setting->Input设置
- 动作映射(触发)
- 轴映射(持续输入)

移动

人物按照移动方向朝向
- 人物不按照控制器旋转
选择ALS_Base_CharacterBP(self),Pawn->Use Control Rotation Yaw取消勾选 - 人物按照运动朝向
选择CharacterMovement(继承),角色移动(旋转设置)->将旋转朝向运动勾选 - 摄像机不随着运动旋转:
选择SpringArm,摄像机设置->使用Pawn控制旋转勾选
视角
先选中SpringArm->Camera Settings->Use Pawn Control Rotation,让SpringArm随着控制器旋转

- 根据当前视角,决定运动方向(即前向、右向)

跳跃
CharacterBP中完成状态绑定


蹲伏
-
CharacterBP中完成状态绑定

-
CharacterMovement->导航移动->勾选可蹲伏

摄像机管理器
代码中控制摄像机状态/位置,与具体的玩家资源解耦,直接持有摄像机管理器即可
基于状态机的摄像机
使摄像机能够与玩家状态同步,比如玩家蹲伏->摄像机下降
浙公网安备 33010602011771号