Unity指令碼的生命週期

來源:互聯網
上載者:User

標籤:dem   運行   text   沒有   開始   常用   rtc   編輯   reset   

Unity指令碼的生命週期

 前言:Unity中定義了10個重要的事件函數,按照執行的先後順序依次為以下的內容:

(1):Reset:重設函數,編輯期當指令碼賦值給遊戲對象時觸發,僅執行一次。

(2):Awake:喚醒函數,最先執行的事件函數,用於優先順序最高的事件處理,僅執行一次。

(3):OnEnable:啟用函數,當指令碼啟動的時候觸發,隨著指令碼的不斷啟用與禁用可以執行多次。

(4):Start:開始函數,一般用於給指令碼欄位賦初值使用,僅執行一次。

(5):FixedUpdate:固定更新函數,以預設0.02s的時鐘頻率執行,常用於物體學類比中處理剛體的移動等,每秒執行多次。

(6):Update:更新函數,執行的頻率不固定,與電腦當前的效能消耗乘反比,常用於邏輯計算,每秒執行多次。

(7):LateUpdate:後更新函數,在其餘兩個更新函數之後執行,常用於攝像機的控制情形中,每秒執行多次。

(8):OnGUI:圖形繪製函數:繪製系統UI介面,每秒執行多次。

(9):OnDisable:指令碼禁用函數,當指令碼禁用的時候觸發,隨著指令碼的不斷啟用和禁用,可以多次的執行。

(10):OnDestroy:銷毀函數,本指令碼所屬遊戲對象銷毀的時候執行本指令碼。僅執行一次。

1.寫下來我們編寫指令碼來測試一下各個函數的生命週期:

 

public class Demo10_ScriptLifeCycle : MonoBehaviour{    void Reset()    {        print("重設函數Reset");    }    void Awake()    {        print("喚醒事件函數Awake");    }    void OnEnable()    {        print("指令碼啟用事件函數OnEnable");    }    void Start()    {        print("開始函數Start");        //開啟調用函數        InvokeRepeating("InvokeTest", 0f, 1f);        //開始協成        StartCoroutine("CoroutineTest");    }    void FixedUpdate()    {        print("固定更新函數FixedUpdate");    }    void Update()    {        print("更新函數Update");        //停止調用函數        if (Input.GetKey(KeyCode.I))        {            CancelInvoke("InvokeTest");        }        //停止協成        else if (Input.GetKey(KeyCode.C))        {            StopCoroutine("CoroutineTest");        }    }    void LateUpdate()    {        print("延遲更新函數LateUpdate");    }    void OnGUI()    {        print("介面繪製函數OnGUI");    }    void OnDisable()    {        print("指令碼禁用函數OnDisable");    }    void OnDestroy()    {        print("銷毀函數OnDestory");    }    void InvokeTest()    {        print("被測試的調用函數的方法");    }    IEnumerator CoroutineTest()    {        while (true)        {            yield return new WaitForSeconds(1f);            print("被測試的協成");        }    }}//class_end

當我們把指令碼賦值給層級視圖的一個Null 物件的時候,注意我們Console視圖中會出現一個資訊:

 

 以上的輸出的結果是Unity生命週期中的Reset()函數在編輯期間就觸發的(當我們給Null 物件賦值我們的指令碼的時候觸發的)。好的,接下來執行我們的程式:

 

 啟動並執行結果我們可以看到指令碼中的部分事件函數的執行的順序與執行的次數。但是我們發現沒有OnDisable和OnDestroy事件函數的輸出。我們開始禁用這個指令碼:

 當我們禁用完指令碼後會發現“被測試的調用函數的方法”和“被測試的協成”依然還是會執行:

 當我們啟用指令碼的時候會執行OnEnable()事件函數:

 我們用結構圖表示各個函數的執行的順序:

 

   

 

Unity指令碼的生命週期

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.