浅谈游戏中的2D/3D换装
换装一直是游戏系统中不可或缺的部分,尤其是在RPG游戏中,如暗黑破坏神,冒险岛,DNF等,早期PC上的2D游戏上采用的比较多的是帧动画,手游兴起后,骨骼动画因储存空间和内存占用小,更平滑等优点被广泛运用.3D换装则一般可以替换Material实现简单换装,或动态合并各个部件,在基础骨骼中生成新的SkinnedMeshRenderer实现效果更好的换装。
2D换装:
骨骼动画:
优点:资源量少,内存占用小,换装简单,通过在帧之间插值得到平滑的动画效果
缺点:类似皮影戏,立体感不够
帧动画:
优点:灵活性高,几乎可以表现任何想表现的内容
缺点:采用堆图实现,需大量图片资源
也有一些游戏在骨骼动画的基础上,部件再引入帧动画来加强表现,这种方式实现相对更复杂点。
以前自己凭兴趣实现过一个2D帧动画换装,这里大概列下如何实现DNF类游戏的换装(美术资源来源于网上,仅供测试使用)。
1:DNF或冒险岛类游戏用帧动画实现纸娃娃系统,前期最重要的是确定人物动作模版,定下来后再在这个基础上设计衣服,裤子等。
定型之后,以这个为模版绘制衣服,武器等,
这种模式如果在游戏运营后要改动模版代价会很大,一系列附加的服饰都要调整,可能这时候已经出了大量的时装了。
使用编辑器里导出图集和数据,再在游戏引擎中依据玩家当前装扮读取相应文件解析出来再组合在一起:
基础模版 服饰等其他部件
最终效果如下:
DEMO和编辑器工程地址(swing cocos2dx):
http://pub.code.oa.com/project/home?projectName=Avatar2DEditor
3D换装:
在AItoy游戏项目中实现了Avatar换装,大致流程如下:
1:首先需要美术同学导出男女各自一套不带蒙皮的基础骨骼,
2:分部件做成带骨骼和SkinnedMeshRenderer的prefab,
3:因为游戏中玩家角色在主城显示和在UI界面展示的角色模型效果不一样,使用了不同的材质,UI界面的角色效果更精细,shader更复杂。这里在部件制作的时候挂载了多个材质,在具体需要展示的时候可以根据需求选择合并某一个材质。
public enum AvatarQuality
{
Low,
High,
}
可以根据显示品质来决定用哪个材质。如Low=0,High=1对应材质索引。
Material material = Instantiate(item.sharedMaterials[materialIndex]) as Material;
实现比较简单:根据性别加载主骨架,再根据角色装扮信息读取各部件资源中的所有蒙皮信息生成新的Mesh,将Mesh与子物体中所有的bones,materials赋予父物体的SkinnedMeshRenderer中。
4:创建一个测试场景提供给美术同学,有新资源时可以及时测试,提升工作效率。
修改部件和表格关联的ID后,点刷新查看效果,方便调试期看效果。