Unity的生命周期函數


總結一下unity中常用的生命周期函數:

 

void Reset()

 

Reset是在用戶點擊檢視面板的Reset按鈕或者首次添加該組件時被調用。此函數只在編輯模式下被調用。Reset最常用於在檢視面板中給定一個最常用的默認值。

 

public GameObject target;

void Reset() {          

  target = GameObject.FindWithTag("Player");

}

 

void  Awake ()

 

當一個腳本實例被載入時Awake被調用。

Awake用於在游戲開始之前初始化變量或游戲狀態。

在腳本整個生命周期內它僅被調用一次Awake在所有對象被初始化之后調用,所以可以安全的與其他對象對話或用諸如 GameObject.FindWithTag 這樣的函數搜索它們。

每個游戲物體上的Awke以隨機的順序被調用。

Awake總是在Start之前被調用。

Awake像構造函數一樣只被調用一次。

 

void OnEnable()

 

當對象變為可用或激活狀態時此函數被調用。

OnEnable不能用於協同程序。

   void OnEnable() {  

  Debug.Log("script was enabled");

   }

 

void Start(){}

 

Start僅在Update函數第一次被調用前調用。

Start在behaviour的生命周期中只被調用一次。

它和Awake的不同是Start只在腳本實例被啟用時調用。

可以按需調整延遲初始化代碼。

Awake總是在Start之前執行。

允許你協調初始化順序。

初始化目標變量, 目標是私有的並且不能在檢視面板中編輯

using UnityEngine;

using System.Collections;

public class StartTest : MonoBehaviour 

   private GameObject target; 

   void Start()

   {   

       target = GameObject.FindWithTag("Player");

   }

}

 

void FixedUpdate(){}

 

固定更新void FixedUpdate ()處理基於物理游戲行為一般用該方法,處理Rigidbody時,需要用FixedUpdate代替Update。當MonoBehaviour啟用時,其 FixedUpdate 在每一幀被調用。

例如:給剛體加一個作用力時,必須應用作用力在FixedUpdate里的固定幀,而不是Update中的幀。(兩者幀長不同)每幀應用一個向上的力到剛體上

   void FixedUpdate() 

   {      

      rigidbody.AddForce(Vector3.up);

   }

 

void OnTriggerXXX(Collider other)

 

進入觸發器void OnTriggerEnter (Collider other) 當Collider(碰撞體)進入trigger(觸發器)時調用OnTriggerEnter。

逗留觸發器void OnTriggerStay (Collider other) 當碰撞體接觸觸發器時,OnTriggerStay將在每一幀被調用。

退出觸發器void OnTriggerExit  (Collider other)當Collider(碰撞體)停止觸發trigger(觸發器)時調用OnTriggerExit。

 

void  OnCollisionXXX (Collision collisionInfo)

 

進入碰撞 void  OnCollisionEnter (Collision collisionInfo),當此collider/rigidbody觸發另一個rigidbody/collider時,OnCollisionEnter將會在開始碰撞時調用。

逗留碰撞 void  OnCollisionStay (Collision collisionInfo),當此collider/rigidbody觸發另一個rigidbody/collider時,OnCollisionStay將會在每一幀被調用。

退出碰撞 void  OnCollisionExit (Collision collisionInfo),當此collider/rigidbody停止觸發另一個rigidbody/collider時,OnCollisionExit將被調用。

Collision包含接觸點,碰撞速度等細節。如果在函數中不使用碰撞信息,省略collisionInfo參數以避免不必要的運算.

 

void OnMouseXXX()

 

void OnMouseUp ():當用戶釋放鼠標按鈕時調用OnMouseUp。OnMouseUp只調用在按下的同一物體上。此函數在iPhone上無效。

void OnMouseDown ():當鼠標在Collider(碰撞體)上點擊時調OnMouseDown。

void OnMouseEnter ():當鼠標進入到Collider(碰撞體)中時調用OnMouseEnter。

void OnMouseExit ():當鼠標移出Collider(碰撞體)上時調用OnMouseExit。

void OnMouseOver ()當鼠標懸浮在Collider(碰撞體)上時調用 OnMouseOver 。

using UnityEngine;

using System.Collections;

public class OnMouseXXX : MonoBehaviour {

    void OnMouseEnter()

    {

        Debug.Log("當鼠標進入");

    }

    void OnMouseDown()

    {

        Debug.Log("當鼠標按下");

    }

   void OnMouseDrag()

    {

        Debug.Log("當鼠標拖動");

    }

    void OnMouseExit()

    {

        Debug.Log("當鼠標推出");

    }

    void OnMouseOver()

    {

        Debug.Log("當鼠標經過");

    }

}

 

void Update ()

 

當MonoBehaviour啟用時,其Update在每一幀被調用。Update是實現各種游戲行為最常用的函數。

using UnityEngine;

using System.Collections;

public class UpdateTest : MonoBehaviour 

{   

   void Update() {      

      transform.Translate(0, 0, Time.deltaTime * 1);

   }

}

 

void LateUpdate () 

 

當Behaviour啟用時,其LateUpdate在每一幀被調用。

LateUpdate是在所有Update函數調用后被調用。

這可用於調整腳本執行順序。一般用來處理攝像機位置等的

例如:當物體在Update里移動時,跟隨物體的相機可以在LateUpdate里實現。

 

void OnGUI() 

 

void OnGUI() 

 

{

 

if (GUI.Button(new Rect(10, 10, 150, 100), "I am a button"))

print("You clicked the button!");

}

 

void OnDisable ()

 

當對象變為不可用或非激活狀態時此函數被調用。當物體被銷毀時它將被調用,並且可用於任意清理代碼。腳本被卸載時,OnDisable將被調用,OnEnable在腳本被載入后調用。

 

void OnDestroy ()

 

當MonoBehaviour將被銷毀時,這個函數被調用。OnDestroy只會在預先已經被激活的游戲物體上被調用

---------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM