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

项目导入ALSV

  1. 首先创建ASLV项目
    image

  2. 迁移到目标项目
    image

  3. 选择目标项目的Content文件夹

AimOffset

本质上是BlendSpace的子类

image

做了进一步的封装约束:

  • 使用动画片段,要求是 旋转网格体叠加

image

网格体旋转作用示意图:

image

相比局部空间旋转,网格体旋转更加合理

蓝图中使用AimOffsetBlendSpace有所不同

image

骨骼

骨骼变换(Transform Bone)

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

image

双骨骼IK

IK和FK

image

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

image

算法原理

image

混合

同步组

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

image

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

image

image

蒙太奇

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

image

故需要改为PlayMontage,参数包括MontageAsset, Starting Section

  • Montage to Play: 创建的Montage资产
  • Starting Section: 播放的Section

image

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

image

image

曲线

材质与变形

动画通知

  • 动画中右键,创建通知
  • 创建蓝图类,继承自AnimNotify(方便通知逻辑复用); 重载父类的ReceivedNotify函数即可

通知(粒子、音效)

通知状态(拖尾)

根运动

很多时候使用In-Place动画,通过程序控制位移,没有问题;
但是当需要使用动画位移时,会出现根留在原地的状况,比如飞扑动作,还是用动画位移更加贴合;

动画播放完,回到起点

image

动画没有发生碰撞

image

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

image

  • 启动跟运动: 根随着动画进行运动
  • 强制根锁定: 动画人物始终位于根处,如果未开启根运动,则动画变为In-Place

过渡规则 和 管道

过度规则

定义进行过度的条件

管道 Conduit

视为无动画的状态State,用于动画蓝图的分流

image

动画修改器

输入与移动

image

输入映射

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

移动

image

人物按照移动方向朝向

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

视角

先选中SpringArm->Camera Settings->Use Pawn Control Rotation,让SpringArm随着控制器旋转
image

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

跳跃

  1. CharacterBP中完成状态绑定
    image
    image

蹲伏

  1. CharacterBP中完成状态绑定
    image

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

摄像机管理器

代码中控制摄像机状态/位置,与具体的玩家资源解耦,直接持有摄像机管理器即可

基于状态机的摄像机

使摄像机能够与玩家状态同步,比如玩家蹲伏->摄像机下降