这篇文章不会给出具体实现和代码(因为我也还没有搞定),但是会对我所理解的换装系统进行一些分析,并给出方向。
一、什么是换装系统
RPG游戏中,更换不同的武器、装备,人物模型也会有相应的改变,这就是换装系统。实现换装系统,可以增加表现力,比如暗黑中换不同盔甲,人物看起来也会不一样,有的极品装备还会有光效环绕,这样刷装备才会更加有趣。
二、实现换装系统的方式
1、武器和外挂式组件(比如护肩,披风)的换装。
这个最简单也最基础,在手部或者肩部创建一个绑点,然后将物体挂接上去就行。这类物体大多数是刚体且没有动画,对应的绑点骨骼会驱动物体正确的运动。在Unity中绑点、骨骼都和Transform组件结合在了一起,所以操作起来非常直观。
2、替换模型
早期网游处理都非常简单,装备会影响到外观的就武器、头盔和盔甲。所以只需要对每一个盔甲准备一个模型,提换盔甲时更换对应的模型就可以了。这个也很简单,跟武器处理类似,不过就是基础模型和挂接模型的区别。
3、替换材质
美术在出资源时,会对同一模型设计不同的贴图。比如同一怪物可以是绿皮的,也可以是黄皮的,如果花纹再复杂些就可以是精英怪物。 对盔甲也是,同一模型替换不同贴图就可以达到不同装备的效果。
4、替换部件
这个是最麻烦的,它涉及到共享骨骼数据。骨骼动画简单说就是,骨骼驱动顶点(受权重值影响),顶点影响蒙皮。一般来说,3D模型和动画有三个核心数据,一个是模型数据,决定了显示的外观;一个是骨骼数据,这个是动画的基础,描述了骨骼之间的权重和关系;最后一个就是动画数据,描述了骨骼是如何运动的。不同模型是可以共享同一套骨骼以及同一套动画的。这个可以很大程度上节约资源,一个模型可能只有一两百K,但是一个动画动辄就几兆。
部件替换的先决条件是,被替换的物体跟原物体使用的是一套骨骼,并且具备相同的权重。制作时也要注意,比如盔甲和头部在动画运动时不能出现接缝。
火炬之光的部件很多都是放在一个虚拟模型上的,即看起来是一个人形,但是除了手套、盔甲、靴子、头盔,其他部位是没用的。游戏会根据一个配置文件决定某穿上一个装备时删除哪几个部件,添加哪几个部件。这么做的好处可能是制作和查阅时更加方便,可以更好的处理装备和身体的动画。
换装的实现很简单,无非就是删除原物体,添加新物体。但是为什么能换装,这个是我们首先需要理解的。 cocos2d-x能不能换装,则是我们需要研究的。
至少现在看来,cocos2d-x v3.2版本是无法实现部件替换的。因为它还不支持submesh,一个模型就是一个整体。 不过我看了看github上面最新的代码里面是支持submesh和绑点的。理论上是可以实现模型换装的。具体代码要研究下才能完成。
好吧,刚刚看了看最新的cocos2d-x,里面的3D模型功能已经比较完善了,而且有换装的demo,我说的几种方式都可以实现。不需要自己研究了。 如果动画骨骼复用也OK的话,那真是节约了时间了(不用考虑cocos2d-x是不是错了),可以多花些时间研究粒子系统了。也可以花时间看看能不能让cocos2d-x兼容OGRE的mesh格式。
原文地址:http://blog.csdn.net/langresser_king/article/details/39436417