unity3D学习笔记之十二 换装系统心得

换装系统
游戏中英雄的形象由头部,身体,四肢组成,每个部位可以佩戴不同的饰品,比如发型,头饰,武器,衣服,翅膀等。这些饰品需要支持替换,卸载。
unity3D学习笔记之十二 换装系统心得_第1张图片
unity3D学习笔记之十二 换装系统心得_第2张图片
我们来单独看一个部件-武器
unity3D学习笔记之十二 换装系统心得_第3张图片
unity3D学习笔记之十二 换装系统心得_第4张图片

唯一的组件是SkinnedMeshRenderer 它主要的三个成员是Mesh(网格),Bone(骨骼),Marital(材质);一只Model都是由许多个Mesh组成的,Bone的作用是将Mesh中的顶点附着(绑定)在骨骼之上,而且每个顶点可以被多个骨骼所控制。没有了Bone结构支撑的Mesh是无法运动的。
理解了这层关系剩下的就是具体逻辑随机应变了。
换装也即是更换SkinnedMeshRenderer的三个成员,所以核心代码就四句
self:setBones(curSmr,newSmr)
curSmr.sharedMesh = newSmr.sharedMesh
curSmr.sharedMaterials = newSmr.sharedMaterials
curSmr.materials = newSmr.materials
另外稍微复杂一点的情况即部件带动画,例如翅膀,处理起来需要多两个步骤
unity3D学习笔记之十二 换装系统心得_第5张图片
1.指定动画骨骼的在人物模型中的parent
前文说过动画是Bone带动的 所以翅膀相比武器多了两组Bone 所以替换时整体为Bone 指定parent即可
newBones.parent = oldBones.parent
2.copy Animation
另 带有粒子效果的部件,也是整体把Particle System 整体放到对应的人物模型的parent下。
规范:
为了实现这个规则我们需要制定命名规范
换装分为两种
1.蒙皮渲染
2.蒙皮渲染+骨骼动画
针对第一种以头发(hair)举例:
人物模型上面头发部件按对应英文名命名
头发:hair 翅膀:wing 头饰:wear
待替换的部件命名:英文名_01 英文名_02
头发:hair_001,hair_02
针对第二种带骨骼动画的模型以翅膀举例:
人物模型上蒙皮部分同第一种,也是直接按对应英文名命名
翅膀:wing
人物模型上骨骼部分:父节点:英文名+boneparent
节点:英文名+bonesrc
待命名的部件命名:英文名_01
骨骼节点:英文名+bonedst
unity3D学习笔记之十二 换装系统心得_第6张图片
unity3D学习笔记之十二 换装系统心得_第7张图片
unity3D学习笔记之十二 换装系统心得_第8张图片
后记:
一路摸索出的解决方案,不知我的表达是否让你清楚,不正确之处欢迎指出。
附件下载

你可能感兴趣的:(编程心得,Unity,Unity3D,unity3d,游戏,换装)