游戏的换装,一般分为3种.换材质,骨骼挂接,共享骨骼.用的比较多的是骨骼挂接和共享骨骼.
1.骨骼挂接
没有动作的骨骼挂接,适合武器.
有动作的骨骼挂接,适合坐骑.
2.共享骨骼
共享骨骼,适合身体部件.主模型(身体)包含整个骨骼,部件模型只包含自己部分的骨骼,应用的时候,部件模型的骨骼共享主模型的骨骼.这样的话,只需要播放主模型的动画,部件会跟着动.
Unity的换装呢,你要百度一下,能搜出一堆文章,方法也是多种多样.有参考价值的却不多.
比如主流推荐的官方demo提供的换装方式.合并mesh,多此一举又麻烦.
比如avatar的方式 ...不适合Legacy动画
其实用以前端游的方式,共享骨骼就行了,Ogre引擎直接提供函数OGRE::shareSkeletonInstanceWith()来实现.而Unity引擎没有这个函数,怎么办呢,自己写一个呗.命名我也取一样的,表示对Unity自己不封装这个函数的鄙视.
// 共享骨骼
public static void ShareSkeletonInstanceWith(SkinnedMeshRenderer selfSkin, GameObject target)
{
Transform[] newBones = new Transform[selfSkin.bones.Length];
for (int i = 0; i < selfSkin.bones.GetLength(0); ++i)
{
GameObject bone = selfSkin.bones[i].gameObject;
// 目标的SkinnedMeshRenderer.bones保存的只是目标mesh相关的骨骼,要获得目标全部骨骼,可以通过查找的方式.
newBones[i]