ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图

代码更新

11.13 · BAOfanTing/ARPG_Game_Code@7ab54d2 · GitHub

武器类

基于item类,创建一个weapon的C++类,基于它创建一个蓝图,刀剑的网格体给它。在蓝图里调动之前在C++写好的sin函数添加到世界偏移量里,得到一把悬浮刀

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第1张图片

在item把重叠函数虚函数话,可以重写,重写后需要在重写的地方删掉UFUCTION,并使用override重写函数

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第2张图片

当不使用super的时候不会调用父类函数也就是该函数目前是空的,我们经过这把刀不会显示名字。使用super需要把参数也 传入,这样会调用我们在父类里边写的显示名称

Sockets

进入人物骨骼树,在右手底下添加一个Socket(插槽,可以用来连接其他物体,可以和骨头一起移动)

右击添加一个资产预览,把剑添加上调整位置

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第3张图片

获取挥剑动画

Mixamo  Mixamo动画资源网站

找到人物xbot,下载Tpose,在引擎里右击导入包或库,直接默认导入

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第4张图片

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第5张图片

找到想要的动画,不带皮肤下载

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第6张图片

导入动画,并且选择之前下载的机器人骨骼

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第7张图片

IK RIG和动画重定向

新建一个IKRig,选择机器人的骨架

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第8张图片

先右击豚骨将它设置为重定向根,并且在此右键生成重定向链,然后将下表这些,头,手臂,手指,腿都设置重定向链

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第9张图片

在对于人物的mesh新建一个ik rig,按照下表进行重定向链的搭建

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第10张图片

新建一个IK retarget选择ik Xbot(现在有的动画的对象),双击进入,新建姿势,让人物和机器人的姿势差不多,这样重定向的动画才不会有太多问题,直接输出动画,这样就得到了拿剑和挥剑的动画,然后进入动画停在帧的位置,微调剑的位置

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第11张图片

装备武器

编写代码

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第12张图片

捡起武器

添加一个按键映射,E,绑定按键。在人物里添加一个内联函数(内联函数通常用于简单的操作,以提高性能,因为它们在编译时会被直接嵌入到调用它们的地方,而不生成额外的函数调用)

修改item,当人物与物体重叠时调用这个SetOverLappingItem函数将重叠物体存为一个变量

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第13张图片

在weapon.cpp里重新写下把武器附加到手上的代码,在人物里能够调用,因此在人物文件里包含武器头文件

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第14张图片

在人物cpp里先将重叠物体转换,然后调用Equip函数装上武器

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第15张图片

Enum for Character State角色状态

在角色代码的开头创建一个枚举,对于下边的情况,其实已经赋值了,顺序是0,1,2。宏UENUM是为了让蓝图能够读取到这个枚举,UMETA的名字是为了在蓝图里看到

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第16张图片

在我们拿起武器时,将角色状态设置为装备一把武器,为了让动画蓝图能够读取到这个变量,我们新建议一个characterType的头文件,将ENUM的代码剪切进去,这样我们就引用了一个很小的头文件。在动画的头文件里我们依旧新建一个角色状态变量

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第17张图片

再到cpp里,在动画的每一帧里获取角色状态,和其他的状态变量一样

选择动画转态

进入动画蓝图待机动作处,使用一个BlendPose(混合动作)基于我们角色状态的枚举,把角色状态传入,新增两个pose,一个不拿武器待机,一个拿武器待机,这样动画就会根据状态变量来选择

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第18张图片

找一个那武器往前走的动画,这里选上Inplace只有动画不会往前移动,下载导入重定向

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第19张图片

一样的操作,使用动画混合让不同的状态有不同的动画

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第20张图片

更好的组织动画蓝图

新建一个mainState的动画蓝图,然后将mainState的节点复制过去

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第21张图片

此时GetCharacterstate是灰色的节点因为父类是默认的类,需要右击新建这个变量让它实际存在。对于其他出错的变量也进行新建,但这样的话其实这些变量永远都不会被设置

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第22张图片

回到初始动画蓝图,新建一个LinkedAnimGragh,将新建的mainstate给他,并且绑定变量

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第23张图片

在新建一个动画蓝图IK,将剩余节点复制过去,创建错误变量,新建一个inputpose,将它存储为cachepose并使用

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第24张图片

回到初始动画蓝图,新建一个linkAnimGraph使用ik的那个蓝图

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第25张图片

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图_第26张图片

你可能感兴趣的:(UE5,c++,学习,ue5)