1.1、新建关卡类StartMap(无任何场景)、GameInstance的子类
1.2、新建游戏关卡GameMap,搭建一些地形和场景
1.2、在项目设置->地图和模式->游戏默认地图选择StartMap,游戏实例类选择
1.3、新建控件蓝图类,在设计器页面中绘制游戏菜单UI界面,添加两个按钮,“开始游戏”和“退出游戏”
设计器页面中可以创建针对某个控件的动画,在图表页面中调用动画
在图表页面中对两个按钮的事件代码进行编写,开始游戏按钮调用open level 退出游戏按钮调用quit game
open Level选择GameMap关卡,但是其调用为阻塞方式调用,如果场景非常大,则会卡住
overlay控件、vertical控件下可以放多个组件,但其他大部分控件下只能放一个
控件可以提升为变量,在图表页面中拖入该变量进行使用,如set text等
1.4、打开StartMap类的蓝图,BeginPlay事件->create widge->add to viewport
保存,编译,运行

2.1、新建GameModeBase的子类BP_GameMode,将GameMap类中游戏模式重载改为BP_GameMode
2.2、新建Character的子类BP_Player,在视口页面中加载网格体,加入spring arm控件和camera控件
2.3、新建PlayerController的子类BP_PlayerController
2.4、在BP_GameMode的属性中调整Player Controller Class值为BP_PlayerController,调整Default Pawn Class值为BP_Player
2.5、在项目设置->输入中添加轴映射和操作映射
2.6、在BP_PlayerController的事件图表中编写输入事件对应到模型位移的代码
用到的方法:Get Controlled Pawn、Add Movement Input、Get Actor Forward Vector、Add Pitch Input、Add Yaw Input
保存,编译、运行

3.1、选择骨骼素材,右键创建动画蓝图、1维混合空间
3.2、在1维混合空间中将人物从静止到走路到跑步的状态设定好
3.3、在动画蓝图的AnimGraph中拖入1维混合空间,新建一个变量speeda用于给混合空间不断地输入新的值
3.4、在动画蓝图的事件图表中在初始化蓝图时获取BP_Player的对象,在update animation事件中将1维混合空间的speeda值修改掉
用到的方法:Try get Pawn owner、cast to BP_Player、get character movement、get velocity、vector length
3.5、在BP_Player的视口页面中Animation Mode选择3.1的动画蓝图

character
use Controller Rotation Yaw
true: character的朝向 跟随 摄像机角度同步变换
false:character的朝向 不跟随 摄像机角度同步变换(第三人称游戏)

character Movement
Orient Rotation to Movement
true:在位移时 改变 角色朝向
false:在位移时 不改变 角色朝向

springArm
Use Pawn Control Rotation
true:
false:

4.1、在项目设置->输入中添加操作映射空格键
4.2、在BP_PlayerController的事件图表中编写输入事件对应到模型跳跃的代码
4.3、在BP_Player类中调用默认的Jump方法
4.4、在角色动画蓝图中新建isJump变量,通过character Movement->isFalling->修改isJump值
4.5、在AnimGraph中添加状态机,并将状态机的输入连接到输出姿势中
4.6、状态机中添加Move、JumpStart、JumpLoop、JumpEnd四个状态,并连接
4.7、Move中将3.3的连接图拷贝进去
4.8、JumpStart中将mm_Jump动画序列导入进去,其中Additive Anim Type设置为no additive,非叠加动画
4.9、JumpLoop中将mm_Fall_Loop动画序列导入进去,其中Additive Anim Type设置为no additive,非叠加动画
4.10、JumpEnd中将mm_Land动画序列导入进去,其中Additive Anim Type设置为no additive,非叠加动画
4.11、Move到JumpStart需要通过isJump来判断触发
4.12、JumpStart到JumpLoop需要判断动画剩余播放时间触发
4.13、JumpLoop到JumpLand需要通过isJump来判断触发
4.14、JumpLand到Move需要判断动画剩余播放时间触发
用到的方法:get relevant Anim Time Remaining Fraction、isFalling
保存,编译、运行

5.1、导入新的ue4模型动画文件夹至content,打开UE4基础模型骨骼文件,选择重定向管理器,添加骨架,绑定新的骨骼
5.2、打开ue4-ue5 IK重定向器,将动画序列导出到新的文件夹,全部保存
5.3、在ue5模型中,选择一个想要使用的带有位移的攻击动画序列,将属性中的EnableRootMotion开关打开,并创建该动画序列的蒙太奇动画,如果不开EnableRootMotion的情况下播动画会穿墙!开启这个参数的意义在于动画的过程中将根骨骼胶囊体一起运动
5.4、在项目设置->输入中添加操作映射鼠标左键
5.5、在BP_PlayerController的事件图表中编写输入事件对应到攻击的代码
5.6、攻击函数:播放蒙太奇动画
5.7、在动画蓝图的AnimGraph中插入slot

最后修改:2024 年 07 月 26 日
如果觉得我的文章对你有用,请随意赞赏