写一写今天的学习心得,保持每天不断的学习,今天写的是人物的换装的技术实现。
人物的换装是游戏开发的一个基本的技术,初来公司,老板就要我学习一下人物换装,也当是给我练练手吧,然后我接到一个需求之后,就要开始学习和搜集资料来实现这一功能,一下是学习心得,接下来我们就一起来学习一下,仅仅供新手参考。
首先 我们将从美工那儿获取到的人物模型资源加载到本地,然后通过写代码挂载到人物模型上面。以下是挂在在模型上面的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; } } }这里要换装主要是游戏里面的Mesh和Materials,可以我们从属性菜单中直接给这个赋值,可行方便的一个策略是将所有的模型资源写在一个数组中,然后通过数组的索引获取到对应的贴图就OK了。
帧数值的js代码,这段是挂在在摄像机上的:
var updateInterval = 0.5; private var lastInterval : double; // Last interval end time private var frames = 0; // Frames over current interval private var fps : float; // Current FPS private var sum = 0.0; private var num = 0.0; function Start() { lastInterval = Time.realtimeSinceStartup; frames = 0; } function OnGUI () { GUILayout.Label("fps:" + fps.ToString("f0") + " " + (sum/num).ToString("f0")); } function Update() { transform.RotateAround (Vector3.zero, Vector3.up, 100 * Time.deltaTime); ++frames; var timeNow = Time.realtimeSinceStartup; if( timeNow > lastInterval + updateInterval ) { fps = frames / (timeNow - lastInterval); frames = 0; lastInterval = timeNow; sum += fps; num++; } }
程序截图:
转眼之间都快到凌晨一点半了,还是可以洗洗睡了!
转载请保留原链接:http://write.blog.csdn.net/postedit/14093409 谢谢!
附加:群号858550,里面有近2000号Unity的同胞们也有一些大牛们,欢迎进入进行技术交流或者学习!
源码下载:http://download.csdn.net/detail/s10141303/6494229
安卓下载:http://download.csdn.net/detail/s10141303/6507163
==================== 迂者 丁小未 CSDN博客专栏=================
MyBlog:http://blog.csdn.net/dingxiaowei2013 MyQQ:1213250243
MyTel:13262983383
====================== 相互学习,共同进步 ===================
本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366240,如需转载请自行联系原作者