一.本篇会讲述通过虚幻资产导入开始,制作人物的输入、生成角色、移动、IK动画、动画混合功能。
1.首先第一步我们需要获取资产,在EPIC虚幻商城中的浏览处选择角色选择免费找到
添加人物到你的项目中
现在把动画文件迁移到我们的主项目中(私信并说明来意免费发动画给你)
2.打开我们的动画资产,找到动画然后右键选择迁移
点击迁移后找到项目文件中的 Content 但是不要选择 Content 中的文件夹
成功将动画文件迁移到我们的项目
二.现在我们的目标是创建一个角色,并将他生成在地图中。
让我们创建一个玩家的蓝图角色,并取名为BP_PlayerBase。将BP_PlayerBase右键创建多个子类蓝图,这样做的优势是父类更改设置子类也会有相同的操作
打开我们的子类角色,点击网格体将骨骼网格体资产添加为我们之前导入的多个资产,将两个资产都添加进我们的角色中,现在角色会朝向错误的方向,并且脚底也没有贴地,这时我们应该通过父类BP_PlayerBase来调整角色转向正确的方向并且通过左右透视来将角色的脚贴向网格体的底部
为了便于操作与观察我们为人物创建一个 SpringArm 然后在 SpringArm 上创建一个 Camera 这样通过 SpringArm 的值大小我们就可以观察到人物的动画状态了。
创建好我们想要生成的玩家以后,我们需要创建玩家控制器以及游戏模式基础来将我们的角色生成在地图中,
打开游戏模式基础 将类的基础设置的玩家控制器类改为我们创建的控制器模式,并且默认Pawn改为 之前我们创建的子类蓝图。
打开我们的项目设置,将默认游戏模式改为我们创建的游戏模式,确保选中的游戏模式是我们之前创建的部分,将默认地图也修改为我们的项目地图最佳。
修改完成后我们回到地图找到世界场景设置,将内部的游戏模式重载改为我们创建的游戏模式,
在地图中创建一个玩家出生点就会生成我们之前选择的那个pawn了
三.能够在地图上创建角色之后,我们来制作输入方式以及按钮,创建一个输入映射情景
创建两个输入操作分别是IA_Look,IA_Movement
对于Movement与Look来说他们只需要在Axis2D平面移动即可
回到 输入映射情景现在WASD都是向前移动,W我们不用调整,S添加否定修改,D添加到世界空间,A添加到世界空间与否定即可完成角色移动的输入映射。
在PlayerBase中创建Event BeginPlay ,通过获取控制器Cast to我们创建的控制器,再获取Enhanced 并且 通过Add Mapping Context 添加我们创建的输入映射情景。
因为我个人习惯的原因,这里简单讲解一下接口的用法。
对于接口来说会避免cast to 的强制引用,在每次游戏开始时每一个cast to 都会引用一次,而接口可以解决这个问题。
右键蓝图------蓝图接口,创建一个引用我们创建的控制器的接口,
点击右上角的函数,创建一个输出,类型改为我们之间创建的控制器
在接口中创建输出之后,我们回到我们创建的控制器中,点击类设置,在已实现的接口添加接口
在我的蓝图-接口中找到我们的接口函数
打开函数调用self即可,现在这个接口就是引用的我们创建的控制器。
创建好接口之后,将cast to切换即可
四.开始制作人物移动
获取event事件获取输出条件,这里只需要通过 Triggered(按下即触发)连接Add Movement Input 就可以添加移动输入,通过获取Get actor Forward Vector 来获取前后左右的向量,然后因为我们对IA_Movement的设置S控制的向量是与前进相反的所以只需要获取前进向量即可
左右的移动也一样,通过Add Movement Input 添加向右的向量,然后向左的向量相反即可。
制作鼠标输入,首先获取IA_Look,然后通过 Add Controller Yaw Input 获取上下看的输入,通过 Add Controller Pitch Input 获取左右的变量
五.IK重定向将动画IK到我们的人物上
在这里补充如何将手指的动画也转移到我们的人物中
复制一份IK绑定,将人物切换为我们想要切换的角色
将链映射的源链与之对应即可获取动画
选中所有动画进行进行导出,如果不是所有动画都能够导出,那么我们应该去存放人物模型动画的位置查看人物模型使用的是否是一样的模型,每个动画使用的模型是不一样的,找到动画对应的模型选中即可看到其他的动画,创建一个文件夹将所有动画放入文件夹即可。
六.现在开始制作混合空间
在动画页面右键选择动画-混合空间-选择IK绑定动画的那个骨骼即可制作混合空间。
进入混合空间后将水平坐标改为运动方向,玩家可以360移动所以将轴值设置为360度,垂直坐标设置为运动速度,最小轴值设置为0,最大轴值设置为500注意这里的500是根据你的人物的最大速度的1/2决定,根据动画的数量来划分网格。
添加动画,首先动画idel状态将其放置运动速度为0的垂直轴0位置,随后设置在500的速度时切换动画为完整的前进动画,根据左右方向放置动画即可完成混合动画,我这里制作了行走、奔跑、蹲伏走三个动画混合空间。
七.使用动画蓝图、状态机、事件蓝图为人物添加动画
在对应的动画中右键-动画-选择动画蓝图,进入动画蓝图后会有AnimGraph动画蓝图,和事件蓝图两个部分,
创建一个状态机,打开状态机
打开状态后创建一个状态,在这个状态中选择混合空间即可将动画添加进人物动画中。
进入事件蓝图,这里主要为了判断玩家是否生成,如果玩家生成那么就将玩家保存到playpawn中。
将玩家生成信息保存为变量后,我们需要获取混合空间所需要的运动方向和运动速度
这里主要通过蓝图更新动画,确保我们的playerpawn是有效的,然后通过Get Velocity 将其返回值向量转换为浮点数,并保存在movement speed 中,通过get actor Rotation 和 get Velocity 一起获取 Calculate Direction 计算方向 ,并将其保存在Movement Direction。
在角色类中选择mash,将动画类选择为我们创建的动画类,人物就可以使用动画移动了。完成!