首先去https://www.mixamo.com/,下载需要的模型和动画。

Ue4 动态生成Mesh_Ue4 动态生成Mesh


下载一个模型,一个站立动画,一个跑步动画,一个特殊动画。

下载模型窗口

Ue4 动态生成Mesh_UE4_02


下载动画时,skin选择without skin,意思就是不下载模型

Ue4 动态生成Mesh_游戏开发_03


由于下载的模型没有附加根骨骼,我们需要为模型添加根骨骼。打开maya(没有的请自行下载),【窗口->设置/首选项->首选项】,进入首选项窗口,点击【设置】,世界坐标系中向上轴由默认的Y轴,改为Z轴。

Ue4 动态生成Mesh_UE4_04


做完这些之后,将模型拖拽至软件中心的窗口,出现以下画面。

Ue4 动态生成Mesh_首选项_05


点选模型,按下【h】快捷键,隐藏模型表面,留下骨骼。

Ue4 动态生成Mesh_拖拽_06


点击【绑定->创建关节】。

Ue4 动态生成Mesh_Ue4 动态生成Mesh_07


在骨骼下方的黑面中,随便点击一个点。然后点击右侧的【属性编辑器】,然后在joint中输入【Root】,这个名称不能变。将变换属性中的平移全部改为0,也就是在原点。然后将关节中的半径改为5,以此让该点更容易被选中。

Ue4 动态生成Mesh_首选项_08


然后点击坐标的【选择】即箭头图标,选中骨骼中的【Hips】,就是尾骨,我们可以看见整个骨架都绿了起来,然后【按住shift,点选Root根节点

】,再按【P】快捷键。就将根骨骼和骨架连接到一起了。

Ue4 动态生成Mesh_UE4_09


这个是模型,直接导出即可,【文件->导出全部】。输入文件名,更改文件类型为【FBX export】,然后点击【导出全部】

Ue4 动态生成Mesh_游戏开发_10


将导出的FBX文件导入UE4项目中,记得勾选【使用TO作为参考姿势】。

Ue4 动态生成Mesh_首选项_11


Ue4 动态生成Mesh_游戏开发_12


这里的模型中,似乎没有东西。双击打开该文件,进入【资产:ganfaul_m_aure】界面,发现模型存在,但是变成透明了,这是材质出现了问题。

Ue4 动态生成Mesh_UE4_13


双击材质部分。

Ue4 动态生成Mesh_拖拽_14


进入资产:Ganfaul_Body,将材质下的混合模式改为【不透明】。

Ue4 动态生成Mesh_游戏开发_15


点击保存,等待编译完成,模型就变正常了。

Ue4 动态生成Mesh_Ue4 动态生成Mesh_16


再次打开maya,开始编辑动画,先制作idle动画。点击【文件->新建场景】,弹出警告窗口,点击【不保存】,然后将我们下载idle动画文件拖拽进去。

通过同样的步骤,创建根骨骼。然后点选【hips骨骼】,我们会看到下方会存在用一根根红线切分的进度条。这个动画的帧数,需要根据最终值,确定截取出动画的长度,这样才能循环播放。

Ue4 动态生成Mesh_Ue4 动态生成Mesh_17

这里我们可以看见动画长度为178帧,所以需要在下方框内,输入【178】,单击【回车】键。

Ue4 动态生成Mesh_UE4_18


然后【导出动画】,导入UE4中。

Ue4 动态生成Mesh_游戏开发_19


注意,导入时骨骼需为前面导入模型的骨骼,然后点击【导入所有】,然后等待导入完成,内容浏览器中就多出了。

Ue4 动态生成Mesh_Ue4 动态生成Mesh_20


然后开始处理running动画。

老样子,新建场景,导入动画,创建根节点,设置动画长度。(ALT+鼠标左键,旋转视角)

这里如果你点击播放按钮你就会发现,动画是有位移的,但是这个骨架虽然位移了,但是根节点却没有变化。在UE4中,模型碰撞体跟随根节点,如果根节点不动,碰撞体也不会发生改变,动画就会一直前冲,然后倒追会原来的位置。所以我们需要改变动画曲线。

需先选中【hips】骨骼点,点击【窗口->动画编辑器->曲线图编辑器】,复制平移x,平移y,平移z。。

Ue4 动态生成Mesh_拖拽_21

点选【Root】骨骼,点击【窗口->动画编辑器->曲线图编辑器】,粘贴上面的平移。

Ue4 动态生成Mesh_游戏开发_22


然后选中平移Z,框选所有线条,将值改为0(别忘记回车),防止动画出现z轴上的变动。

Ue4 动态生成Mesh_Ue4 动态生成Mesh_23


再选中【hips】骨骼点,选中平移X中的第一个点,复制其值,然后框选所有动画曲线,将所有值改为第一个点的值,然后曲线变成一条直线。

Ue4 动态生成Mesh_拖拽_24


Ue4 动态生成Mesh_首选项_25


以同样步骤处理平移y。这是在移除hips对模型移动,改为由根节点来控制模型的移动。

注意:如果这里出现动画变成原地运动的话,可能是你播放了动画,导致当前模型的动画位移已经发生了改变。

比如这样,z轴曲线变成这样。

Ue4 动态生成Mesh_UE4_26


正确的根骨骼 z轴曲线该为:

Ue4 动态生成Mesh_游戏开发_27


出现以上情况,请重新按照以上步骤操作一次。

我选择的特殊动作名字是Jump Over,也有位移,按照上面的步骤操作处理即可。

新建一个文件夹Model,用来保存所有的模型动画文件。

点击【鼠标右键->蓝图类->角色】。新建一个角色蓝图类,取名【New_Player】,并双击打开,选中其中的【Mesh(继承)】,在网格体中,选择骨骼网格体为我们导入的模型骨骼。并调整模型位置Z=-90和转向Z=-90。

Ue4 动态生成Mesh_游戏开发_28


然后使用【添加组件】,在CapsuleComponent(继承)下添加SpringArm(弹簧臂组件),在SpringArm下添加Camera(相机组件),调整相机高度Z轴=90。然后在SpringArm的细节面板中,在摄像机设置中,将【使用Pawn控制旋转】打勾,然后编译一下。

Ue4 动态生成Mesh_首选项_29

找到并打开ThirdPersonCharacter蓝图类(第三人称模板自带的),进入其事件图表,复制Mouse input 和Movement input部分蓝图至New_Player蓝图类中:

Ue4 动态生成Mesh_首选项_30


接下来点击New_Player蓝图类下的CharacterMovement(继承),在细节面板中,找到角色移动(旋转设置),将【将旋转朝向运动】打勾。目的是根据键盘朝向移动。

Ue4 动态生成Mesh_首选项_31


但是上面的选择和默认旋转有冲突,所以点选New_Player(继承)->类默认值。细节面板中找到Pawn,将【使用控制器旋转Yaw】取消勾选。

Ue4 动态生成Mesh_游戏开发_32


然后编译保存。点击【动画->动画蓝图】,进入创建动画蓝图,父类选择【AnimInstance】,目标骨骼选择我们导入的骨骼。然后点击【确认】键。取名【Player_AnimBlueprint】

Ue4 动态生成Mesh_拖拽_33


然后点选动画->混合空间1D,进入选取骨骼界面,选择导入的骨骼。取名【Player_BlendSpace1D】。

Ue4 动态生成Mesh_游戏开发_34


双击打开【Player_BlendSpace1D】,将右下角的资产浏览中的Idel动画拖拽至中心黑色区域的0值处,running动画将拖拽至100值处。

点击左边的Axis Settings下的水平坐标,将名称改为Speed,最大轴值改为425,网格分区数量为1(如果有walk动画的话,可以更改这个值,加入walk,根据移动速度,改变动画。处于一个阀值,播放一个动画)。

Ue4 动态生成Mesh_首选项_35


别忘了点击保存,编译一下。

进入Player_AnimBlueprint的AnimGraph,拖拽右方的Player_BlendSpeace1D,进入蓝图类,然后将Speed提升为变量,更名Speed,连接起来,图标如下图所示。编译一下。

Ue4 动态生成Mesh_UE4_36


在Player_AnimBlueprint的事件图表中,输入以下蓝图。

Ue4 动态生成Mesh_UE4_37


然后进入New_Player蓝图类中,点击Mesh(继承),在细节面板中,找到动画下的动画类,选择【Player_AnimBlueprint】,编译一下。

Ue4 动态生成Mesh_Ue4 动态生成Mesh_38

然后将做好的New_Player拖拽至关卡中,删除原本的小白人,在细节面板中搜索【poss】,将【自动控制玩家】设置为玩家0.

Ue4 动态生成Mesh_Ue4 动态生成Mesh_39


然后点击运行按钮。

Ue4 动态生成Mesh_UE4_40


之后我们就能够看到模型,运动起来,当前进时,会播放奔跑动画。

找到我们的特殊动画,【鼠标右击->创建->动画蒙太奇】,取名使用默认名字即可,我这里叫Jump_Over_Root_Montage。然后进入Player_AnimBlueprint中的AnimGraph,加入【插槽“DefaultSlot”】,链接起来。

Ue4 动态生成Mesh_UE4_41


然后在New_Player的事件图表中,输入以下蓝图,别忘了选择资产。

Ue4 动态生成Mesh_Ue4 动态生成Mesh_42


然后点击运行,即可通过按【1】键控制角色,播放特殊动作。

Ue4 动态生成Mesh_游戏开发_43