3D鏈遊開發功能,3D鏈遊系統開發技術分析及原始碼

MrsFu123發表於2022-05-27

  Unity3D程式碼及效率最佳化總結


  1、在使用陣列或ArrayList物件時應當注意


  length=myArray.Length;


  for(inti=0;i


  {


  }


  避免


  for(inti=0;i


  {


  }


  2、如果沒有必要每幀都處理,則可以每隔幾幀處理一次


  voidUpdate(){if(Time.frameCount%6==0){DoSomething();}}


  3、定時重複呼叫可以使用InvokeRepeating函式實現,比如,啟動0.5秒後每隔1秒執行一次DoSomeThing函式:


  voidStart()


  {


  InvokeRepeating("DoSomeThing",0.5f,1.0f);


  }


  4、少使用臨時變數,特別是在Update OnGUI等實時呼叫的函式中。


  voidUpdate()


  {


  Vector3 pos;


  pos=transform.position;


  }


  可以改為:


  privateVector3 pos;


  voidUpdate()


  {


  pos=transform.position;


  }


  5、主動進行垃圾回收


  voidUpdate()


  {


  if(Time.frameCount%50==0)


  {


  System.GC.Collection();


  }


  }


  6、最佳化數學運算,儘量避免使用float,而使用int,特別是在手機遊戲中,儘量少用複雜的數學函式,比如sin,cos等函式。改除法/為乘法,例如:使用x*0.5f而不是x/2.0f。


  7、壓縮Mesh


  匯入3D模型之後,在不影響顯示效果的前提下,最好開啟Mesh Compression。Off,Low,Medium,High這幾個選項,可酌情選取。對於單個Mesh最好使用一個材質。


  8、執行時儘量減少Tris和Draw Calls


  預覽的時候,可點開Stats,檢視圖形渲染的開銷情況。特別注意Tris和Draw Calls這兩個引數。一般來說,要做到:Tris保持在7.5k以下,Draw Calls保持在35以下。


  9、避免大量使用Unity自帶的Sphere等內建Mesh


  Unity內建的Mesh,多邊形的數量比較大,如果物體不要求特別圓滑,可匯入其他的簡單3D模型代替。


  10、如果可能,將GameObject上不必要的指令碼disable掉。如果你有一個大的場景在你的遊戲中,並且敵方的位置在數千米意外,這是你可以


  disable你的敵方AI指令碼直到它們接近攝像機為止。一個好的途徑來開啟或關閉GameObject是使用


  SetActiveRecursively(false),並且球形或盒型碰撞器設為trigger。


  11、刪除空的Update方法。當透過Assets目錄建立新的指令碼時,指令碼里會包括一個Update方法,當你不使用時刪除它。


  12、引用一個遊戲物件的最合乎邏輯的元件。有人可能會這樣寫someGameObject.transform,gameObject.rigidbody.transform.gameObject.rigidbody.transform,但是這樣做了一些不必要的工作,你可以在最開始的地方引用它,像這樣:


  privateTransform myTrans;


  void Start()


  {


  myTrans=transform;


  }


  13、協同是一個好方法。可以使用協同程式來代替不必每幀都執行的方法。(還有InvokeRepeating方法也是一個好的取代Update的方法)。


  14、儘可能不要再Update或FixedUpdate中使用搜尋方法(例如GameObject.Find()),你可以像前面那樣在Start方法裡獲得它。


  15、不要使用SendMessage之類的方法,他比直接呼叫方法慢了100倍,你可以直接呼叫或透過C#的委託來實現。


  16、使用JavaScript或Boo語言時,你最好確定變數的型別,不要使用動態型別,這樣會降低效率,你可以在指令碼開頭使用#pragmastrict來檢查,這樣當你編譯你的遊戲時就不會出現莫名其妙的錯誤了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69993319/viewspace-2897597/,如需轉載,請註明出處,否則將追究法律責任。

相關文章