UE4中实现角色换装(游戏换装解决方案)
前言
本篇教程将讲解如何在虚幻中实现角色换装。换装效果将实现高度贴合,主要解决的是角色穿戴服装时,服饰与动画贴合问题,包括动画关节穿模问题。此方案可以解决大部分游戏中服饰穿戴问题。
由于没有找到合适的角色动画,我在3DMax中自己做了一个假的,只是为了展示服装穿上后的效果。

图一中,两个模型是独立分开的。其中假定较细的模型是角色,粗的模型是服装。那么动画展示的结果就是衣服穿上后,角色做动画时,衣服随角色运动的效果。
准备
首先,如果希望制作角色换装,需要美术同学做下配合。我们希望,动作同学在给角色进行骨骼绑定的时候,将服装也绑定到相同的骨骼上!这是必须的!因为换装的原理就是将多个骨骼网格进行拼接。然后将拼接后的新的骨骼网格设置给当前的骨骼网格组件,完成动画同步。
必备条件
1.基于同一套骨骼的两个模型
2.制作骨骼动画
3.模型分开进行导出。将骨骼与模型绑定导出,然后将动画单独导出。
步骤
1.创建C++项目
构建C++项目,在C++工程中创建类继承自Character(可以选择继承Actor或是Pawn均可,但是需要单独加入SkeletalMeshComponent组件,而Character自带此组件)
2.导入资源
将美术素材进行导入(我使用的素材已经附加到网盘,在文章最后)。导入时需要注意,记得勾上导入骨骼。你将获得以下两个资源。


3.构建角色蓝图
创建蓝图,父类选择构建的C++中的Character类。
设置SkeletalMesh组件中的Mesh为图二中的SkeletalMesh
在角色蓝图上添加摄像机组件,并将角色的Possess Player设置为Player0(拖拽到场景中可以直接获得输入权限)
4.构建动画蓝图
构建动画蓝图,骨架选择导入的模型骨架。
将导入的扭动动作链接到最终姿势,并将动画蓝图设置给第三步中的角色蓝图
最后可以看到角色蓝图中有动画呈现即可
5.编写换装逻辑代码
处理思路,我们要做的就是创建一个新的SkeletalMesh,然后将角色Mesh(图一)和服饰Mesh(图二)进行重新拼合。最后将拼合的新Mesh设置给当前角色。
我假定按下Q按键即可响应换装,换装代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /* 1.构建一个新的skeletalmesh对象 2.加载所有的希望打包到一起的skeleltalMesh和骨骼 3.构建打包器 4.进行合并 5.设置给当前的skeletonmeshcomponent */ //1 USkeletalMesh* NewMesh = NewObject<uskeletalmesh>(); //2 USkeletalMesh* RoleMesh = LoadObject<uskeletalmesh>(NULL, TEXT( "SkeletalMesh'/Game/Pillar/pillar01.pillar01'" )); USkeletalMesh* PillarMesh = LoadObject<uskeletalmesh>(NULL, TEXT( "SkeletalMesh'/Game/Pillar/pillar02.pillar02'" )); USkeleton* RoleSkeleton = LoadObject<uskeleton>(NULL, TEXT( "Skeleton'/Game/Pillar/pillar01_Skeleton.pillar01_Skeleton'" )); //为创建的SkeletalMesh设置骨架 NewMesh->Skeleton = RoleSkeleton; //3 TArray<uskeletalmesh*> MeshArray; MeshArray.Add(RoleMesh); MeshArray.Add(PillarMesh); TArray<fskelmeshmergesectionmapping> InForceSectionMapping; FSkeletalMeshMerge MeshMerge(NewMesh, MeshArray, InForceSectionMapping, 0); //4 if (MeshMerge.DoMerge()) { //5 GetMesh()->SetSkeletalMesh(NewMesh); } |
注意:上面的代码封装到任意可执行逻辑块即可,只需要执行一次。测试即可展现换装效果
引擎版本:4.21.1
百度网盘 链接: https://pan.baidu.com/s/1iNAUmwnyvv6zLPEx1RaZyQ 提取码: rwhk
兄弟,谢谢你的分享,很有用。我以后要是也有想要分享的东西可以发表在你这里吗。
可以的~