代码更新
11.13 · BAOfanTing/ARPG_Game_Code@7ab54d2 · GitHub
武器类
基于item类,创建一个weapon的C++类,基于它创建一个蓝图,刀剑的网格体给它。在蓝图里调动之前在C++写好的sin函数添加到世界偏移量里,得到一把悬浮刀
在item把重叠函数虚函数话,可以重写,重写后需要在重写的地方删掉UFUCTION,并使用override重写函数
当不使用super的时候不会调用父类函数也就是该函数目前是空的,我们经过这把刀不会显示名字。使用super需要把参数也 传入,这样会调用我们在父类里边写的显示名称
Sockets
进入人物骨骼树,在右手底下添加一个Socket(插槽,可以用来连接其他物体,可以和骨头一起移动)
右击添加一个资产预览,把剑添加上调整位置
获取挥剑动画
Mixamo Mixamo动画资源网站
找到人物xbot,下载Tpose,在引擎里右击导入包或库,直接默认导入
找到想要的动画,不带皮肤下载
导入动画,并且选择之前下载的机器人骨骼
IK RIG和动画重定向
新建一个IKRig,选择机器人的骨架
先右击豚骨将它设置为重定向根,并且在此右键生成重定向链,然后将下表这些,头,手臂,手指,腿都设置重定向链
在对于人物的mesh新建一个ik rig,按照下表进行重定向链的搭建
新建一个IK retarget选择ik Xbot(现在有的动画的对象),双击进入,新建姿势,让人物和机器人的姿势差不多,这样重定向的动画才不会有太多问题,直接输出动画,这样就得到了拿剑和挥剑的动画,然后进入动画停在帧的位置,微调剑的位置
装备武器
编写代码
捡起武器
添加一个按键映射,E,绑定按键。在人物里添加一个内联函数(内联函数通常用于简单的操作,以提高性能,因为它们在编译时会被直接嵌入到调用它们的地方,而不生成额外的函数调用)
修改item,当人物与物体重叠时调用这个SetOverLappingItem函数将重叠物体存为一个变量
在weapon.cpp里重新写下把武器附加到手上的代码,在人物里能够调用,因此在人物文件里包含武器头文件
在人物cpp里先将重叠物体转换,然后调用Equip函数装上武器
Enum for Character State角色状态
在角色代码的开头创建一个枚举,对于下边的情况,其实已经赋值了,顺序是0,1,2。宏UENUM是为了让蓝图能够读取到这个枚举,UMETA的名字是为了在蓝图里看到
在我们拿起武器时,将角色状态设置为装备一把武器,为了让动画蓝图能够读取到这个变量,我们新建议一个characterType的头文件,将ENUM的代码剪切进去,这样我们就引用了一个很小的头文件。在动画的头文件里我们依旧新建一个角色状态变量
再到cpp里,在动画的每一帧里获取角色状态,和其他的状态变量一样
选择动画转态
进入动画蓝图待机动作处,使用一个BlendPose(混合动作)基于我们角色状态的枚举,把角色状态传入,新增两个pose,一个不拿武器待机,一个拿武器待机,这样动画就会根据状态变量来选择
找一个那武器往前走的动画,这里选上Inplace只有动画不会往前移动,下载导入重定向
一样的操作,使用动画混合让不同的状态有不同的动画
更好的组织动画蓝图
新建一个mainState的动画蓝图,然后将mainState的节点复制过去
此时GetCharacterstate是灰色的节点因为父类是默认的类,需要右击新建这个变量让它实际存在。对于其他出错的变量也进行新建,但这样的话其实这些变量永远都不会被设置
回到初始动画蓝图,新建一个LinkedAnimGragh,将新建的mainstate给他,并且绑定变量
在新建一个动画蓝图IK,将剩余节点复制过去,创建错误变量,新建一个inputpose,将它存储为cachepose并使用
回到初始动画蓝图,新建一个linkAnimGraph使用ik的那个蓝图