寫一寫今天的學習心得,保持每天不斷的學習,今天寫的是人物的換裝的技術實現。
人物的換裝是游戲開發的一個基本的技術,初來公司,老板就要我學習一下人物換裝,也當是給我練練手吧,然后我接到一個需求之后,就要開始學習和搜集資料來實現這一功能,一下是學習心得,接下來我們就一起來學習一下,僅僅供新手參考。
首先 我們將從美工那兒獲取到的人物模型資源加載到本地,然后通過寫代碼掛載到人物模型上面。以下是掛在在模型上面的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
====================== 相互學習,共同進步 ===================
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。