Unity基礎 之 生命週期函數(一)

這是我參與8月更文挑戰的第3天,活動詳情查看:8月更文挑戰markdown

一,初始化

1.1 函數描述

運行狀態初始化:(也是執行順序)編輯器

  1. Awake:初始化時調用,在Start函數以前調用
  2. OnEnable:在對象啓用時調用
  3. Start:僅當啓用腳本實例時,纔會在第一幀調用

編輯器狀態初始化ide

  1. Reset:編輯器下調用,當腳本第一次附加到物體上或者點擊Reset時執行,來初始化腳本屬性。

實際應用函數

  1. Awake:一般使用爲須要提早初始化的邏輯。好比單例賦值 private void Awake(){Instance = this;}
  2. OnEnable:處理每次顯示時都須要進行初始化的邏輯,一般和OnDisable配合使用。 好比: 遊戲邏輯使用並修改了變量Number,而下次顯示時使用是又須要Number = 1,此時就能夠寫private void Awake(){Number = 1;}
  3. Start:一般使用爲一些變量初始化邏輯。 好比:獲取指定物體:private void Start(){child1 = transform.GetChild(0);}
  4. Reset:一般在遊戲測試調試時,使用編輯器下的初始化。經過點擊Reset執行一個邏輯。

1.2 示例解析

運行狀態初始化示例:   搭建場景新建兩個UI -> Image,一個做爲背景,一個做爲彈窗。新建腳本並掛載到彈窗Image上。post

腳本內容以下:測試

using UnityEngine;

public class LifeCycleFunction : MonoBehaviour
{
    #region Initialization 初始化
    public int Number = 1;
     
    private void Awake()
    {
        Debug.Log("Awake 初始化時調用,在Start函數以前調用,...");
    }
    private void OnEnable()
    {
        Debug.Log("OnEnable 每次對象啓用都會被調用...");
    }
    private void Reset()
    {
        Number = 0;
        Debug.Log("Reset 編輯器模式下才可被調用...Number: " + Number);
    }
    private void Start()
    {
        Debug.Log("Start 僅當啓用腳本實例時,纔會在第一幀調用...");
    }
    
    #endregion
}
複製代碼

這次運行結果展現了Awake,OnEnable,Start 的執行順序,運行結果: ui

編輯器下的初始化: 1.腳本拖拽附加時自動執行this

2.點擊Reset調用: 能夠看到我手動Number設置爲2,Reset後被重置爲代碼中寫的0; spa


二,更新

2.1 函數描述

三個函數3d

  1. FixedUpdate:固定時間調用,FixedUpdate一般比Update更頻繁地調用
  2. Update:每幀調用一次
  3. LateUpdate:在Update完成後,每幀調用一次

實際應用

  1. FixedUpdate:全部物理計算和更新都在FixedUpdate中處理。它是固定時間調用,不會受到幀率影響。好比:一些物理屬性的更新操做Force,Collider,Rigidbody等。
  2. Update:每幀調用一次,根據幀率的快慢影響執行速度。一般的遊戲邏輯都寫在這裏,好比:和玩家交換,當用戶按下空格時進行執行什麼操做。
  3. LateUpdate:每次Update完成後調用移除。常見用處是相機跟隨主角,好比:主角在Update中移動,則能夠在LateUpdate執行相機的移動,這將能夠保證攝像機跟着的時候以前的邏輯一塊兒徹底執行完成。

2.2 示例解析

將以下腳本添加到上面新建的腳本中:(爲了方便查看,將上面初始化的函數先註釋掉)

#region 更新

// 固定時間調用,FixedUpdate一般比Update更頻繁地調用
private void FixedUpdate()
{
    Debug.Log("FixedUpdate 固定時間調用...");
}
// 每幀調用一次
private void Update()
{
    Debug.Log("Update 每幀調用一次...");
}
// 在Update後,每幀調用一次 
private void LateUpdate()
{
    Debug.Log("LateUpdate 在Update後,每幀調用一次...");
}
#endregion
複製代碼

運行後,能夠看到結果以下:


三,禁用銷燬

3.1 函數描述

三個函數

  1. OnDisable: 當對象被禁用時調用此函數(其父物體被禁用也會觸發)。
  2. OnDestroy: 在對象存在的最後一幀的全部幀更新以後調用此函數。

實際應用

  1. OnDisable: 一般和OnEnable配合使用。好比:在OnEnable添加監聽,在OnDisable移除監聽
  2. OnDestroy: 當物體銷燬或者場景關閉時觸發。好比:子彈打到牆壁時,須要銷燬子彈並觸發一個打擊音效。

3.2 示例解析

1.遊戲物體禁用觸發OnDisable

2.遊戲物體銷燬時觸發OnDisableOnDestroy


Unity 官方圖解: 圖解

相關文章
相關標籤/搜索