---2D换装
一、换装方案
1、帧动画换装
-
优点:灵活性高,几乎可以表现任何想表现的内容
-
缺点:采用堆图实现,需大量图片资源
2、骨骼动画换装
-
优点:资源量少,内存占用小,换装简单,通过在帧之间插值得到平滑的动画效果
-
缺点:类似皮影戏,立体感不够
二、骨骼动画换装
1、换装原理
- 皮肤 skin
- 插槽 slot
- 附着物 attachment
皮肤上设有N个插槽,局部换装时替换某个插槽的附着物即可;整套换装时直接替换皮肤。
2、三方框架
1、Spine
skeleton.SetSkin(skinPlayer); // 1. Set the active skin
skeleton.SetSlotsToSetupPose(); // 2. Use setup pose to set base attachments.
animationState.Apply(skeleton);
skinPlayer.AddAttachments(skin); // 局部换装
zh.esotericsoftware.com/spine-unity
2、DragonBones
---3D换装
1、给模型穿上全部衣服,通过显示隐藏的方式控制换装
- 优点:实现简单
- 缺点:皮肤数量多的情况下,内存占用较大,维护成本较高
2、通过SkinMeshRender
- 优点:无内存占用问题
- 缺点:实现相对复杂
二、通过替换Skin信息实现换装
1、几个概念
- Mesh:网格组件。通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而多边形实际上是由多个三角形拼接而成的。所以一个3D模型的表面其实是由多个彼此相连的三角面构成。三维空间中,构成这些三角形的点和边的集合就是Mesh。
- MeshRender:网格渲染器,MeshRender 负责渲染 MeshFilter 指定的 Mesh,在 Transform 的位置渲染这个Mesh。MeshRender参数主要指定是否产生和接受阴影,以及使用的Meterial。
- SkinMeshRender:蒙皮网格渲染器”,该组件用于渲染骨骼动画,其中Mesh的形状由动画骨骼变形。
2、SkinMeshRender的几个重要属性
- bones:骨骼,骨骼是一个Transform数组,用于动画。一个SkinMeshRender对应一个或者多个骨骼。
- sharedMesh:对应的网格
- materials:对应的材质
三、换装的实现
1、模具拆分
将模具拆分不同部分,例如:头发、脸、上半身、腿、脚等等,每个部分为一个GameObject
2、添加SkinMeshRender组件
gameObject.AddComponent<SkinnedMeshRenderer>()
3、换装
skm.bones = bones.ToArray(); // 绑定骨骼
skm.materials = materials; // 替换材质
skm.sharedMesh = sharedMesh; // 更换mesh