unity开发小贴士之四 换装系统总结

换装系统 
游戏中英雄的形象由头部,身体,四肢组成,每个部位可以佩戴不同的饰品,比如发型,头饰,武器,衣服,翅膀等。这些饰品需要支持替换,卸载。 
这里写图片描述
这里写图片描述 
我们来单独看一个部件-武器 
这里写图片描述 
这里写图片描述

唯一的组件是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 
另外稍微复杂一点的情况即部件带动画,例如翅膀,处理起来需要多两个步骤 
这里写图片描述
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 
这里写图片描述 
这里写图片描述 
这里写图片描述 
后记: 
一路摸索出的解决方案,不知我的表达是否让你清楚,不正确之处欢迎指出。

附件下载

猜你喜欢

转载自www.cnblogs.com/Hyhom/p/9045117.html