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.构建一个新的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 

2 条评论

回复 Zery 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注