目标
当创建新的项目时,可以选择第三人称模板。其中自带了一个人物的骨骼模型以及控制它的逻辑。其中还有教程链接。
本篇的目标是,从教程中学习,在新的空白的工程中建立起一个有相同功能的可控制角色。
0.美术资源准备:骨骼模型以及动画
由于这个教程的时间是2014年,其中用到的资源似乎已经失效了。因此我决定从现有的第三人称模板中导出需要的资源:
需要导出的UAsset有:
1)1个骨骼模型:
会得到SK_Mannequin.FBX
,使用blender打开会发现其中是一个带绑定的骨骼模型:
2)7个动画序列
得到7个fbx文件,其中都是骨骼动画(不带模型):
1.新建空白工程,导入资源
新建工程,选择空白模板
之后开始导入资源:
1)导入骨骼模型
导入SK_Mannequin.FBX
之后除了骨架网络体(Skeletal Mesh)
,物理资源(Physics Asset)
和骨架(Skeleton)
应该都会被自动创建。
2)导入动画
导入7个fbx动画。需要注意的时候导入选项中选择刚才创建的骨架
。
2. 创建“混合空间(Blend Space)”
“混合空间”表示该怎么混合动画,1维混合空间表示由1个值驱动的动画混合。
例如,由速度来驱动的待机、步行、跑步之间的混合:
1)创建一个混合空间1D资源:
选择骨架:
创建的出的资源我命名为Blend_Idle_Walk_Run
:
2)编辑
双击便可以打开UE4的动画编辑器窗口中的动画序列编辑模式:
基本的操作方式是:首先在右下角的资源浏览器中选择想要编辑的动画序列。之后在左侧的资源详情中可以看到细节的参数;而下方的面板中包含了一些预览用的操作。
选择Blend_Idle_Walk_Run
,在资源详情中编辑其参数,将混合的参数名字设置为Speed
,并且指定其值的范围是0
到375
:
其中Number of Grid Divisions
表示分段,当前是4
表示为分为四段。下面,将Idle
动画拖到0.0
的位置,将Walk
拖动到1/4
的位置,将Run
拖到1.0
的位置:
拖动下面的预览点,可以预览混合的情况:
3. 动画蓝图
动画蓝图中包含了驱动角色动画的逻辑。在当前,其实只是需要处理走动和跳跃之间的逻辑,其状态机可以表示为如下:
图中的“locomotion”表示走动,具体由Blend_Idle_Walk_Run
混合出来。
1)创建动画蓝图
选择AnimInstance
作为父类,之后选择目标骨架。
我将其命名为MyCharacterAnimBP
2)编辑AnimGraph
双击动画蓝图资源,打开了UE4的动画编辑器窗口中的动画蓝图编辑器:
随后双击AnimGraph,便可以对AnimaGraph进行编辑:
首先,创建一个状态机
。其中将包含着能输出结果的逻辑。
关于状态机的详细操作,可见《状态机总览 | Unreal Engine Documentation》。
最终,状态机的连接如下:
- 对于
OnTheGround
:
它输出了Blend_Idle_Walk_Run
的结果,以Speed
这个变量作为参数,这个变量会由之后的事件图表中得到。
- 对于
Jump_Start
、Jump Loop
、Jump_End
都是直接播放了动画:
要注意,对于Jump_Start
和Jump_End
,Loop Animation
设置为false
。 - 对于
OnTheGround -> Jump_Start
:
根据IsInAir
的值来进行判断:
- 对于
Jump Loop -> Jump_End
:
也是根据IsInAir
的值来进行判断,不过取反:
- 对于
Jump_Start -> Jump Loop
和Jump_End -> OnTheGround
,都是根据动画所剩的时间来判断,如果时间小于0.1
就判断为进入转换。
也就是说,为了保证能运行,需要设置Speed
和IsInAir
变量。
3)编辑事件图表
基本上,就是从Pawn
那里获得速度,赋值给Speed
,从Movement Component
那里获得角色是否在下降(Is Falling
),赋值给IsInAir
。
4.设置输入映射
打开项目设置的输入,映射一下按键的输入:
5.角色蓝图
1)创建角色蓝图
选取Character
为父类
我将其命名为MyCharacter
2)编辑蓝图的组件
选择Mesh这个组件:
- 设置好骨骼模型
- 将其脚部移动到胶囊体的底部
- 旋转面向箭头的位置
- 将
Anim Class
设置为之前创建的动画蓝图
添加SpringArm组件
,将Use Pawn Control Rotation
设置为true
。
然后增加相机组件在SpringArm组件层级之下。
CharacterMovement组件
的Orient Rotation to Movement
是true
:
编辑角色蓝图的默认属性:Use Controller Rotation Yaw
为false
。
3)编辑蓝图的输入
基本上,就是获取输入用户输入,然后进行处理。
6.创建游戏模式
1)创建游戏模式的蓝图
选择父类为GameMode
创建的资源命名为MyGame
双击这个资源,可以直接设置其默认值,将默认的Pawn类设置为MyCharacter
。
2)随后,打开关卡的World Settings
将GameMode Override
设置为MyGame
7.测试
点击最终测试符合预期:
问题
- 角色感觉左肩缺了一块,还没查明是为什么
- 官方教程中,其实后续还有加入挥拳动作,和动画蒙太奇相关的内容,待学习。