写一写今天的学习心得,保持每天不断的学习,今天写的是人物的换装的技术实现,有关动态材质的动态切换可以参考: http://bbs.9ria.com/thread-134275-1-1.html这个博客的内容。
这里要换装主要是游戏里面的Mesh和Materials,可以我们从属性菜单中直接给这个赋值,可行方便的一个策略是将所有的模型资源写在一个数组中,然后通过数组的索引获取到对应的贴图就OK了。
人物的换装是游戏开发的一个基本的技术,初来公司,老板就要我学习一下人物换装,也当是给我练练手吧,然后我接到一个需求之后,就要开始学习和搜集资料来实现这一功能,一下是学习心得,接下来我们就一起来学习一下,仅仅供新手参考。
首先 我们将从美工那儿获取到的人物模型资源加载到本地,然后通过写代码挂载到人物模型上面。以下是挂在在模型上面的js代码,也就是换装的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 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; } } } |
帧数值的js代码,这段是挂在在摄像机上的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | var updateInterval = 0.5;private var lastInterval : double; // Last interval end timeprivate var frames = 0; // Frames over current intervalprivate var fps : float; // Current FPSprivate 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://unity3d.9tech.cn/news/2013/1105/38441.html