开发环境
Window7
Unity3D3.4
MB525defy Android 2.2.1
羽化的第九篇博客,这个新的一个月开始了,回家的倒计时在慢慢接近,心里很是激动~ ~ 最近在玩3DS的《小小太阳》,大神的续作质量很是出众,玩法基本和PS2版一致,就是操作方式改变很多,这类游戏更适合做触控吧,原来的四叶草全是才华出众的游戏制作人,但在利益社会也只能解散,不能再给玩家带来更多像大神一样独特风格的游戏,实在很可惜。还有就是3个小时就翻了的《Limbo》,关于结局网上貌似很多说法,羽化认为故事是男孩去地狱见死去的女孩,女孩最后挖的应该是自己的尸体,死于机械事故埋葬在下面。。。XBLA上的下载神作,物理引擎制作精良,解密也很有趣,推荐给所有人~ ~ 话说这个公司Mads Wibroe是自己写的游戏引擎,非常漂亮,最近听说他们为了提高效率已经开始使用Unity开发了,加上最近公布的《新仙剑奇侠传Online》也是Unity开发的游戏,Unity真是越来越火了~ ~
这次带来的是Unity游戏换装,这是羽化在公司完成的,想法很简单,只能说是一个引,要用在具体实践上还要做修改和写一个完善的脚本,代码依旧很简单,主要是讲讲制作思想。
本次学习:
1.人物换装研究
2. 换装脚本
1. 人物换装研究
从羽化进公司开始,第一个参与开发Android的一个2D仿DNF的游戏,虽然只是一个Demo但学习了很多游戏开发技巧,其中就有换装。虽然没有直接做2D换装,但从素材里面可以看出DNF的换装就是切换切片,人物动作都不会带上武器,因为后面武器可以自由切换,和人物保持一个动作,这个就有点像星球大战制作特效一样,演员只是挥动一个破棍子,而光剑是后期处理上去的。Unity里面并没用明确告诉我们如何换装,于是羽化就从导出的FBX入手,一个人物,想要运动就会有骨骼,装备其实是绑定在骨骼上的,这么简单的想法就完成了羽化这次的代码,虽然标题是换装,其实只是穿衣和脱衣。。。怕换成这标题太吸引眼球了- -,往下看。。。
2. 换装脚本
先送上脚本 换装.js
- var ME1 : Mesh;
- var MA1 : Material;
- private var TK = 0;
- var ME2 : Mesh;
- var MA2 : Material;
- private var WQ = 0;
- var ME3 : Mesh;
- var MA3 : Material;
- private var ZJ = 0;
- var ME4 : Mesh;
- var MA4 : Material;
- private var YJ = 0;
- function OnGUI()
- {
- GUILayout.Label("");
- if(GUILayout.Button ("Helm头盔"))
- {
- if(TK == 1)
- {
- transform.Find("group2").Find("Object02").GetComponent(MeshFilter).mesh = null;
- transform.Find("group2").Find("Object02").renderer.material = null;
- TK = 0;
- }
- else
- {
- transform.Find("group2").Find("Object02").GetComponent(MeshFilter).mesh = ME1;
- transform.Find("group2").Find("Object02").renderer.material = MA1;
- TK = 1;
- }
- }
- if(GUILayout.Button ("Weapon武器"))
- {
- if(WQ == 1)
- {
- transform.Find("group2").Find("polySurface1").GetComponent(MeshFilter).mesh = null;
- transform.Find("group2").Find("polySurface1").renderer.material = null;
- WQ = 0;
- }
- else
- {
- transform.Find("group2").Find("polySurface1").GetComponent(MeshFilter).mesh = ME2;
- transform.Find("group2").Find("polySurface1").renderer.material = MA2;
- WQ = 1;
- }
- }
- if(GUILayout.Button ("LCollar左肩"))
- {
- if(ZJ == 1)
- {
- transform.Find("group2").Find("polySurface3").GetComponent(MeshFilter).mesh = null;
- transform.Find("group2").Find("polySurface3").renderer.material = null;
- ZJ = 0;
- }
- else
- {
- transform.Find("group2").Find("polySurface3").GetComponent(MeshFilter).mesh = ME3;
- transform.Find("group2").Find("polySurface3").renderer.material = MA3;
- ZJ = 1;
- }
- }
- if(GUILayout.Button ("RCollar右肩"))
- {
- if(YJ == 1)
- {
- transform.Find("group2").Find("polySurface4").GetComponent(MeshFilter).mesh = null;
- transform.Find("group2").Find("polySurface4").renderer.material = null;
- YJ = 0;
- }
- else
- {
- transform.Find("group2").Find("polySurface4").GetComponent(MeshFilter).mesh = ME4;
- transform.Find("group2").Find("polySurface4").renderer.material = MA4;
- YJ = 1;
- }
- }
- }
var ME1 : Mesh;
var MA1 : Material;
private var TK = 0;
var ME2 : Mesh;
var MA2 : Material;
private var WQ = 0;
var ME3 : Mesh;
var MA3 : Material;
private var ZJ = 0;
var ME4 : Mesh;
var MA4 : Material;
private var YJ = 0;
function OnGUI()
{
GUILayout.Label("");
if(GUILayout.Button ("Helm头盔"))
{
if(TK == 1)
{
transform.Find("group2").Find("Object02").GetComponent(MeshFilter).mesh = null;
transform.Find("group2").Find("Object02").renderer.material = null;
TK = 0;
}
else
{
transform.Find("group2").Find("Object02").GetComponent(MeshFilter).mesh = ME1;
transform.Find("group2").Find("Object02").renderer.material = MA1;
TK = 1;
}
}
if(GUILayout.Button ("Weapon武器"))
{
if(WQ == 1)
{
transform.Find("group2").Find("polySurface1").GetComponent(MeshFilter).mesh = null;
transform.Find("group2").Find("polySurface1").renderer.material = null;
WQ = 0;
}
else
{
transform.Find("group2").Find("polySurface1").GetComponent(MeshFilter).mesh = ME2;
transform.Find("group2").Find("polySurface1").renderer.material = MA2;
WQ = 1;
}
}
if(GUILayout.Button ("LCollar左肩"))
{
if(ZJ == 1)
{
transform.Find("group2").Find("polySurface3").GetComponent(MeshFilter).mesh = null;
transform.Find("group2").Find("polySurface3").renderer.material = null;
ZJ = 0;
}
else
{
transform.Find("group2").Find("polySurface3").GetComponent(MeshFilter).mesh = ME3;
transform.Find("group2").Find("polySurface3").renderer.material = MA3;
ZJ = 1;
}
}
if(GUILayout.Button ("RCollar右肩"))
{
if(YJ == 1)
{
transform.Find("group2").Find("polySurface4").GetComponent(MeshFilter).mesh = null;
transform.Find("group2").Find("polySurface4").renderer.material = null;
YJ = 0;
}
else
{
transform.Find("group2").Find("polySurface4").GetComponent(MeshFilter).mesh = ME4;
transform.Find("group2").Find("polySurface4").renderer.material = MA4;
YJ = 1;
}
}
}
目前游戏还没策划,所有命名和人物构建还没规划,大家就将就看下。这里的换装主要是换了游戏里面的Mesh和Materials,这里羽化把这两个数值写死了,在实际游戏中,所有装备应该是一个数组,从数组中抽取出来吧~ ~ 下面是实际截图。
项目地址: