生命週期函式的概念
所有繼承MonoBehavior的指令碼,最終都會掛在到GameObject遊戲物件上
生命週期函式,就是該指令碼物件依附的GameObject物件從出生到消亡整個生命週期中
會透過反射自動呼叫一些特殊函式
Unity幫助我們記錄了一個GameObject物件依附了哪些指令碼
會自動的得到這些物件,透過反射去執行一些固定名字的函式
生命週期函式
生命週期函式的訪問修飾符一般為private和protected,因為不需要外部再呼叫生命週期的函式 都是Unity自己幫助我們呼叫的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson01 : MonoBehaviour
{
// 當物件(自己這個類的物件)被建立時才會呼叫該生命週期函式
private void Awake()
{
// 在Unity中列印資訊的兩種方式
// 1.沒有繼承MonoBehavior類的時候 (假設沒有繼承的話,為了掛載這裡只能繼承)
Debug.Log("123");
//Debug.LogError("出錯了");
//Debug.LogWarning("警告!!");
// 2.繼承了MonoBehavior的時候 有一個現成的方法可以使用
print("1234567");
}
// 對於我們來說 想要當一個物件被啟用時 進行一些邏輯處理,就可以使用這個函式
private void OnEnable()
{
print("已啟用!");
}
private void Start()
{
print("start");
}
// 該函式主要是用於 進行物理更新
// 它是每一幀 執行的 但是這裡的幀 和遊戲幀有些不同
// 它的時間間隔 是可以在project setting中的Time中設定的
private void FixedUpdate()
{
print("FixedUpdate");
}
// 主要用於處理遊戲核心邏輯更新的一個函式
private void Update()
{
print("Update");
}
// 一般這個函式適用於處理攝像機更新相關內容的
// Update和LateUpdate之間 Unity進了一些處理 處理我們動畫相關的更新
private void LateUpdate()
{
print("LateUpdate");
}
// 如果我們希望在一個物件被禁用時做一些處理,就可以在該函式中寫邏輯
private void OnDisable()
{
print("OnDisable");
}
private void OnDestroy()
{
print("OnDestroy");
}
}
生命週期函式支援繼承多型
下面程式碼雖然沒有繼承MonoBehaviour,依然能夠掛載到物體上面,因為他的父類是MonoBehaviour的子類,這也體現了多型。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson01Son : Lesson01
{
protected override void Awake()
{
base.Awake();
print("子類的Awake");
}
}
注:@唐老獅