【正文】
了必需的定義。在c和Boo中必須手工做。 7避免使用構(gòu)造函數(shù) 不要在構(gòu)造函數(shù)中初始化任何變量使用Awake或Start實(shí)現(xiàn)這個(gè)目的。 因此如果你想實(shí)現(xiàn)如一個(gè)單件模式不要使用構(gòu)造函數(shù)而是使用Awake。因此Unity可能使用大量的編譯時(shí)間來優(yōu)化。Unity將會(huì)為這些變量重新使用動(dòng)態(tài)類型。 function Start var foo : MyScript GetComponentMyScript 這里我們強(qiáng)制foo為指定類型你將獲得更好的性能。Unity將報(bào)告編譯錯(cuò)誤。這一次可以很容易地通過緩存保存在一個(gè)私有變量里引用該組件。 而整列或者數(shù)組類更容易使用因?yàn)槟憧梢院苋菀椎靥砑釉厮麄儙缀鯖]有相同的速度。 private var positions : Vector3 function Awake positions new Vector3100 for var i0ilt100i positionsi 最簡(jiǎn)單的和所有優(yōu)化最好的是少工作量的執(zhí)行。 if gt 100 return perform real work work... 這不是一個(gè)好主意因?yàn)閁nity必須調(diào)用更新功能而你正在執(zhí)行工作的每一個(gè)幀。只要任何相機(jī)可以看到物體OnBecameVisible將被調(diào)用當(dāng)沒有相機(jī)看到任何一個(gè)OnBecameInvisible將被調(diào)用。一旦你離開這個(gè)影響球你將得到OnTriggerEnter/Exit調(diào)用。這應(yīng)該會(huì)節(jié)省大量的處理周期。比原始的C代碼慢大約50。 在這些文件夾之內(nèi)的腳本不能直接訪問這些文.。你可以在Unity主窗口的右下角看到一個(gè)小的旋轉(zhuǎn)進(jìn)度圖標(biāo)。 這允許腳本以驚人的速度執(zhí)行。Update調(diào)用的問題是它們每幀中都發(fā)生。 function OnBecameVisible enabled true function OnBecameInvisible enabled false 。有3種方法來做到這一點(diǎn) 。直到玩家靠近時(shí)什么都沒有做。關(guān)于內(nèi)置數(shù)組最好的事情是他們直接嵌入在一個(gè)結(jié)構(gòu)緊湊的緩沖區(qū)的數(shù)據(jù)類型沒有任何額外的類型信息或其他開銷。這同樣適用于腳本組件在你使用GetComponent代替變換或者其它的東西。不幸的是該優(yōu)化需要一點(diǎn)編碼并且不一定是值得的但是如 果你的腳本是真的用了很長(zhǎng)時(shí)間了你需要把最后一點(diǎn)表現(xiàn)出來這是一個(gè)很好的優(yōu)化。pragma strict解決了這個(gè)簡(jiǎn)單的在腳本頂部添加pragma strict。但是這也使得代碼運(yùn)行速度較慢。這就是為什么Unity比其他在JavaScript的實(shí)現(xiàn)平均快20倍的原因之一。 概覽最重要的類 Javascript中可訪問的全局函數(shù)或C中的基類 移動(dòng)/旋轉(zhuǎn)物體 動(dòng)畫系統(tǒng) 剛體 FPS或第二人稱角色控制器 概覽性能優(yōu)化 1使用靜態(tài)類型 在使用Javascript時(shí)最重要的優(yōu)化是使用靜態(tài)類型而不是動(dòng)態(tài)類型Unity使用一種叫做類型推理的技術(shù)來自自動(dòng)轉(zhuǎn)換Javascript為靜態(tài)類型編碼而不需要你做任何工作。構(gòu)造函數(shù)不僅會(huì)在無法預(yù)料的時(shí)刻被調(diào)用它也會(huì)為預(yù)設(shè)或未激活的游戲物體調(diào)用。 Coroutines必有一個(gè)IEnumerator返回類型并且yield使用yield return… 而不是yield… using using UnityEngine public class NewBehaviourScript : MonoBehaviour // C coroutine IEnumerator SomeCoroutine // 等一幀 yield return 0 //等兩秒 yield return new WaitForSeconds 2 5不要使用命名空間 目前Unity還不支持將代碼放置在一個(gè)命名空間中這個(gè)需要將會(huì)出在未來的版本中。 Awake和Start的不同是Awake在場(chǎng)景被加載時(shí)候運(yùn)行而Start在第一次調(diào)用Update或FixedUpdate函數(shù)之前被調(diào)用所有Awake函數(shù)在任何Start函數(shù)調(diào)用之前被調(diào)用。最需要注意的是 所有的行為腳本必須從MonoBehaviour繼承直接或間接。 Do print quotThis is printed immediately