Babybus-u3d技術(shù)交流-Unity3D優(yōu)化總結(jié) 基本注意項
1啃擦、在使用數(shù)組或ArrayList對象時應當注意
[csharp]
view plain
copy
length=myArray.Length;
for(int i=0;i<length;i++)
{
}
避免
[csharp]
view plain copy
for(int i=0;i<myArray.Length;i++)
{
}
2、如果沒有必要每幀都處理责掏,則可以每隔幾幀處理一次
[csharp]
view plain
copy
void Update(){
if(Time.frameCount%6==0) { DoSomething(); }}
3伞广、定時重復調(diào)用可以使用InvokeRepeating函數(shù)實現(xiàn),比如赵刑,啟動0.5秒后每隔1秒執(zhí)行一次 DoSomeThing 函數(shù):
[csharp]
view plain
copy
void Start()
{
InvokeRepeating("DoSomeThing", 0.5f, 1.0f);
}
4、少使用臨時變量场刑,特別是在Update OnGUI等實時調(diào)用的函數(shù)中般此。
[csharp]
view plain
copy
void Update()
{
Vector3 pos;
pos=transform.position;
}
可以改為:
[csharp]
view plain
copy
private Vector3 pos;
void Update()
{
pos=transform.position;
}
5、主動進行垃圾回收
[csharp]
view plain
copy
void Update()
{
if(Time.frameCount%50==0)
{
System.GC.Collection();
}
}
6牵现、優(yōu)化數(shù)學運算铐懊,盡量避免使用float,而使用int瞎疼,特別是在手機游戲中科乎,盡量少用復雜的數(shù)學函數(shù),比如sin,cos等函數(shù)丑慎。改除法/為乘法,例如:使用x*0.5f而不是 x/2.0f 喜喂。
7瓤摧、壓縮 Mesh
導入 3D 模型之后竿裂,在不影響顯示效果的前提下,最好打開 Mesh Compression照弥。 Off, Low, Medium, High 這幾個選項腻异,可酌情選取。對于單個Mesh最好使用一個材質(zhì)这揣。
8悔常、 運行時盡量減少 Tris 和 Draw Calls
預覽的時候,可點開 Stats给赞,查看圖形渲染的開銷情況机打。特別注意 Tris 和 Draw Calls 這兩個參數(shù)。 一般來說片迅,要做到: Tris 保持在 7.5k 以下 残邀,Draw Calls 保持在 35 以下。
9柑蛇、避免大量使用 Unity 自帶的 Sphere 等內(nèi)建 Mesh
Unity 內(nèi)建的 Mesh芥挣,多邊形的數(shù)量比較大,如果物體不要求特別圓滑耻台,可導入其他的簡單3D模型代替空免。
10、如果可能盆耽,將GameObject上不必要的腳本disable掉蹋砚。如果你有一個大的場景在你的游戲中扼菠,并且敵方的位置在數(shù)千米意外,這是你可以disable你的敵方AI腳本直到它們接近攝像機為止坝咐。一個好的途徑來開啟或關(guān)閉GameObject是使用SetActiveRecursively(false)娇豫,并且球形或盒型碰撞器設為trigger。
11畅厢、刪除空的Update方法冯痢。當通過Assets目錄創(chuàng)建新的腳本時,腳本里會包括一個Update方法框杜,當你不使用時刪除它浦楣。12、引用一個游戲?qū)ο蟮淖詈虾踹壿嫷慕M件咪辱。有人可能會這樣寫someGameObject.transform振劳,gameObject.rigidbody.transform.gameObject.rigidbody.transform,但是這樣做了一些不必要的工作油狂,你可以在最開始的地方引用它历恐,像這樣:
privateTransform myTrans;
void Start()
{
myTrans=transform;
}
13、協(xié)同是一個好方法专筷∪踉簦可以使用協(xié)同程序來代替不必每幀都執(zhí)行的方法。(還有InvokeRepeating方法也是一個好的取代Update的方法)磷蛹。
14吮旅、盡可能不要再Update或FixedUpdate中使用搜索方法(例如GameObject.Find()),你可以像前面那樣在Start方法里獲得它味咳。
15庇勃、不要使用SendMessage之類的方法,他比直接調(diào)用方法慢了100倍槽驶,你可以直接調(diào)用或通過C#的委托來實現(xiàn)责嚷。
16、使用或Boo語言時掂铐,你最好確定變量的類型罕拂,不要使用動態(tài)類型,這樣會降低效率堡纬,你可以在腳本開頭使用#pragmastrict 來檢查聂受,這樣當你編譯你的游戲時就不會出現(xiàn)莫名其妙的錯誤了。