總結一下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只會在預先已經被激活的游戲物體上被調用
---------------------