在游戏开发中,有时我们需要根据A对象生成一个新的B对象,两者的逻辑不一样因此用的是不同蓝图,但我们希望B能完全复制A的外观。这时我们要做的工作就是把A的mesh组件(character对象必有)复制到B中
一、创建并拷贝旧mesh
首先将A对象的mesh通过下面的方法拷贝到B的mesh中。第一步是指定需要拷贝的mesh,第二步是设置mesh相对于挂接的父项的偏移量,第三步是由于每个mesh可能会有多个material成员,因此需要把这些成员逐个拷贝过去
二、拷贝挂在mesh下面的子mesh
有时候,对象A的mesh可能不只有mesh本身,还会有多个子mesh。如下图,同时有身体、头发、脸部三个子mesh
这时候,除了拷贝mesh本身,还需要将子类的mesh逐个拷贝过去。方法是:
1、用GetChildrenComponents获取Mesh的所有子组件,然后逐个尝试cast成SkeletalMesh
2、对于每个子组件,先用Add Skeletal Mesh Component创建一个新组件,然后用上述的方法把A对应子组件的信息拷贝到这个新组件中。由于是子组件,因此在拷贝完信息之后,还需要将子组件绑定到B对象的mesh组件上,如下图
第一步是AttachToComponent,将子组件绑定到mesh组件对应的挂接点上,其中挂接点的名字从A的子组件中获取。
第二步则是调用SetMasterPoseComponent方法,如果没调用此方法,就会发现虽然B对象已经有了对应的子组件,但这些组件都是静止的,比如头发完全静止,没有原来A对象中随风摆动的效果。
三、拷贝动画信息
在将子mesh拷贝完之后,最后一步则是将mesh的动画蓝图的配置拷贝过来,如下图,使角色B可以正常播放动画。