一、腳本的生命周期
Awake() 腳本組件載入時(調用一次)
Start() 第一個Update發生之前(調用一次)
Update() 大部分游戲行為代碼被執行的地方,除了物理代碼
FixedUpdate() 固定時間調用,常用于物理相關的計算,比如對RigidBody的操作
LaterUpdate() 每幀Update調用之后
OnGui() 繪制GUI時調用
Reset() 組件重設為默認值時(只用于編輯狀態)
OnDisable() 當對象設置為不可用時
OnDestroy() 組件銷毀時調用
image.png
生命周期調用以下方法的執行順序是如下
void Awake()
{
Debug.Log("執行順序Awake---1");
}
//判斷一個游戲對象可用?
void OnEnable()
{
Debug.Log("執行順序OnEnable---2");
}
// Use this for initialization
void Start()
{
Debug.Log("執行順序Start---3");
}
//固定幀率調用,一般用于物理方面(例如剛體)
void FixedUpdate()
{
Debug.Log("執行順序FixedUpdate---3");
}
// Update is called once per frame
void Update()
{
Debug.Log("執行順序Update---4");
}
//在Update函數之后調用,頻率跟UpDate一樣。
void LateUpdate()
{
Debug.Log("執行順序LateUpdate---5");
}
//繪制UI控件的時候調用。例如加Button按鈕控件,Lable標簽控件等等
void OnGUI()
{
Debug.Log("執行順序OnGUI---6");
}
//當游戲對象不可用的時候調用(當禁止一個游戲對象運行的時候或者退出游戲的時候會調用方法)
void OnDisable()
{
//Destroy(this.gameObject);//摧毀當前的游戲對象
Debug.Log("執行順序Disable---7");
}
//注意:OnEnable和OnDisable:當游戲進行時,一個游戲第一次啟用的時候會執行Awake()、OnEnable()、Start()方法函數,
//當游戲對象不可用的時候,會調用OnDisable()方法,再重新啟用就不會執行Awake()、Start()方法函數了。
生命周期表
腳本的加載順序
腳本只有掛載在游戲物體上時,才會被啟用。
假設 我現在同一個物體上掛載了兩個腳本,分別為Scripts1.cs 與
Scripts2.cs,它們兩個的Awake函數是同時進行的嗎?如果不是,
我該怎樣調節它們的執行順序?
選擇Edit<Project Settings < Scripts Execution Order
紅圈中為腳本名,紅線代表時間,時間越大,執行順序越靠后
點擊加號可以添加自定義腳本
圖1-1
Update 詳解
FixedUpdate 固定頻率更新
可以在 Edit -> project settings -> Time -> Fixed Timestep 中設定該頻率
Update 渲染幀更新
Update是受當前渲染的物體,更確切的說是三角形的數量影響,有時快有時慢,幀率會變化
LateUpdate 延遲更新
在每幀的所有Update函數執行完以后,才會執行此函數
圖1-2
如何在代碼中獲取基本屬性
public GameObject obj;
// Use this for initialization
void Start () {
obj.SetActive(true);//讓游戲對象顯示或者隱藏
obj.isStatic=true;//表示當前游戲對象是一個禁止對象
obj.name = "hello";//在游戲運行時游戲對象名字的更改;
Transform t2 = GetComponent<Transform>();
print(t2.position.x);//輸出Transform下position的x軸的值
}
// Update is called once per frame
void Update () {
}