最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Unity腳本生命周期與執(zhí)行順序

 更新時(shí)間:2021年06月17日 09:28:21   作者:iwiniwin  
在Unity中,腳本可以理解為附加在游戲?qū)ο笊系挠糜诙x游戲?qū)ο笮袨榈闹噶畲a。必須綁定在游戲?qū)ο笊喜拍荛_始它的生命周期。游戲?qū)ο罂梢岳斫鉃槟苋菁{各種組件的容器,游戲?qū)ο蟮乃薪M件一起決定了這個(gè)對(duì)象的行為和游戲中的表現(xiàn)

一、腳本生命周期

Unity腳本中的常見必然事件如下表所示

名稱 觸發(fā)時(shí)機(jī) 用途
Awake 腳本實(shí)例被創(chuàng)建時(shí)調(diào)用 用于游戲?qū)ο蟮某跏蓟⒁釧wake的執(zhí)行早于所有腳本的Start函數(shù)
OnEnable 當(dāng)對(duì)象變?yōu)榭捎没蚣せ顮顟B(tài)時(shí)被調(diào)用 用途
Start Update函數(shù)第一次運(yùn)行之前調(diào)用 用于游戲?qū)ο蟮某跏蓟?/td>
Update 每幀調(diào)用一次 用于更新游戲場(chǎng)景和狀態(tài)
FixedUpdate 每個(gè)固定物理時(shí)間間隔調(diào)用一次 用于物理狀態(tài)的更新
LateUpdate 每幀調(diào)用一次(在update之后調(diào)用) 用于更新游戲場(chǎng)景和狀態(tài),和相機(jī)有關(guān)的更新一般放在這里
OnGUI 渲染和處理OnGUI事件 用途
OnDisable 當(dāng)前對(duì)象不可用或非激活狀態(tài)時(shí)被調(diào)用 用途
OnDestroy 當(dāng)前對(duì)象被銷毀時(shí)調(diào)用 用途

下面將以代碼來看看這些必然事件的調(diào)用時(shí)機(jī)

新建一個(gè)C#腳本,并添加以下代碼,然后將其掛到任意的游戲?qū)ο笊?/p>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestTest : MonoBehaviour
{
    private void Awake()
    {
        Debug.Log("Awake");
    }

    private void OnEnable()
    {
        Debug.Log("OnEnable");
    }

    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Start");
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("Update");
    }

    private void FixedUpdate()
    {
        Debug.Log("FixedUpdate");
    }

    private void LateUpdate()
    {
        Debug.Log("LateUpdate");
    }

    private void OnGUI()
    {
        Debug.Log("OnGUI");
    }

    private void OnDisable()
    {
        Debug.Log("OnDisable");
    }

    private void OnDestroy()
    {
        Debug.Log("OnDestroy");
    }
}

打印結(jié)果如下圖示:

可以發(fā)現(xiàn),Awake, Start函數(shù)都是在游戲?qū)ο蟊粍?chuàng)建時(shí)調(diào)用一次。
當(dāng)游戲過程中調(diào)整腳本的可見狀態(tài)時(shí),會(huì)分別調(diào)用OnEnable, OnDisable函數(shù),而Awake和Start將不會(huì)再調(diào)用,也就是說一旦腳本被掛載上以后,Awake和Start有且僅會(huì)被執(zhí)行一次。

而Update, FixedUpdate, LateUpdate, OnGUI函數(shù)是會(huì)在游戲過程中被多次調(diào)用的(日志窗口右側(cè)的數(shù)字表示該條日志信息打印的次數(shù))。
最后在游戲?qū)ο蟊讳N毀時(shí),會(huì)依次調(diào)用OnDisable, OnDestory函數(shù)。

二、MonoBehavior生命周期圖

下面再放上一張的生命周期圖

三、腳本執(zhí)行順序

在游戲開發(fā)中,不可避免的會(huì)使用許多腳本,那么如何確定不同腳本之間調(diào)用的先后順序呢

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test1 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("start 1");
    }

    private void Awake()
    {
        Debug.Log("awake 1");
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("update 1");
    }
}

將上面的代碼依次添加到Test1, Test2和Test3腳本中(適當(dāng)修改打印的日志),并掛載到不同的游戲?qū)ο笊稀?br /> 掛載的順序?yàn)橄葤燧dTest3,再掛載Test2,最后掛載Test1
打印結(jié)果如下圖所示

打印結(jié)果是先打印Test1的,再打印Test2,最后打印Test3。
其實(shí)腳本的執(zhí)行順序與掛載到游戲?qū)ο笊系南群箜樞蛴嘘P(guān)。最先被掛載的最后執(zhí)行,最后被掛載的最先執(zhí)行(如果讀者有疑惑,可以不斷調(diào)整腳本的掛載順序,看日志打印與上述結(jié)論是否相符)。

需要注意的是,無論多個(gè)腳本的執(zhí)行順序如何,但所有腳本的Awake函數(shù)一定會(huì)比所有的Start函數(shù)先執(zhí)行完,所有的Start函數(shù)一定也會(huì)比所有的Update函數(shù)先執(zhí)行完,其他有順序的生命周期函數(shù)也是類似的(從上圖的日志信息中也可以看出)。

四、自定義執(zhí)行順序

有時(shí)可能有這樣的需求,A腳本中的屬性實(shí)例化可能需要用到B腳本中的屬性,所以在A腳本屬性實(shí)例化時(shí),必須保證B腳本已經(jīng)被實(shí)例化完畢。當(dāng)然我們可以通過先掛在A腳本再掛載B腳本來實(shí)現(xiàn)。但在實(shí)際開發(fā)中,用到的腳本中多,很難去記住各個(gè)腳本掛載的先后順序。所以Unity提供了Script Execution Order配置項(xiàng),來配置多個(gè)腳本的執(zhí)行順序。

在工程面板中任意點(diǎn)擊選中一個(gè)腳本文件,在屬性面板中會(huì)出現(xiàn)該腳本的詳細(xì)信息,選擇右上角的Execution Order... ,打開如下圖所示界面

點(diǎn)擊“+”可以添加腳本,為其設(shè)置order值,order值越小的越先執(zhí)行,order值越大的越后執(zhí)行

以上就是淺談Unity腳本生命周期與執(zhí)行順序的詳細(xì)內(nèi)容,更多關(guān)于Unity 生命周期的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#開發(fā)webService接口的流程步驟

    C#開發(fā)webService接口的流程步驟

    在C#中,Web Service 接口是一種用于遠(yuǎn)程程序間的通信機(jī)制,它允許客戶端通過HTTP協(xié)議訪問服務(wù)器端提供的功能和服務(wù),本文給大家詳細(xì)介紹了C#開發(fā)webService接口的流程步驟,需要的朋友可以參考下
    2024-11-11
  • C#語法之泛型的多種應(yīng)用

    C#語法之泛型的多種應(yīng)用

    這篇文章主要介紹了C#語法之泛型的多種應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • C#?變量,常量數(shù)據(jù)類型詳情

    C#?變量,常量數(shù)據(jù)類型詳情

    這篇文章主要介紹了C#?變量,常量數(shù)據(jù)類型詳情,常量是指在程序運(yùn)行中不能改變的數(shù)據(jù),定義一個(gè)常量與定義一個(gè)變量過程類似,只是多加一個(gè)關(guān)鍵詞const
    2022-07-07
  • winform基于異步委托實(shí)現(xiàn)多線程搖獎(jiǎng)器

    winform基于異步委托實(shí)現(xiàn)多線程搖獎(jiǎng)器

    這篇文章主要介紹了winform基于異步委托實(shí)現(xiàn)多線程搖獎(jiǎng)器的方法,包含了線程的運(yùn)用及隨機(jī)數(shù)的生成,需要的朋友可以參考下
    2014-10-10
  • C# 反射與dynamic最佳組合示例代碼

    C# 反射與dynamic最佳組合示例代碼

    這篇文章主要介紹了C# 反射與dynamic最佳組合示例代碼,需要的朋友可以參考下
    2017-09-09
  • C#中GraphicsPath的Widen方法用法實(shí)例

    C#中GraphicsPath的Widen方法用法實(shí)例

    這篇文章主要介紹了C#中GraphicsPath的Widen方法用法,實(shí)例分析了Widen方法的使用技巧,需要的朋友可以參考下
    2015-06-06
  • C# WebService發(fā)布以及IIS發(fā)布

    C# WebService發(fā)布以及IIS發(fā)布

    這篇文章主要介紹了C# WebService發(fā)布以及IIS發(fā)布的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C#微信開發(fā)之發(fā)送模板消息

    C#微信開發(fā)之發(fā)送模板消息

    這篇文章主要為大家詳細(xì)介紹了C#微信開發(fā)之發(fā)送模板消息的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#實(shí)例化和靜態(tài)類對(duì)象調(diào)用對(duì)比

    C#實(shí)例化和靜態(tài)類對(duì)象調(diào)用對(duì)比

    這篇文章主要介紹了C#實(shí)例化和靜態(tài)類對(duì)象調(diào)用對(duì)比,什么時(shí)候用實(shí)例化對(duì)象,什么時(shí)候用靜態(tài)類對(duì)象,內(nèi)存和生命周期又是如何,框架本身的回收機(jī)制是什么,下文詳細(xì)解說需要的小伙伴可以參考一下
    2022-04-04
  • C#高效實(shí)現(xiàn)集合批量添加與刪除操作

    C#高效實(shí)現(xiàn)集合批量添加與刪除操作

    在C#中,對(duì)集合進(jìn)行批量操作通常涉及使用集合類型提供的方法和特性,以及可能的循環(huán)或LINQ查詢來高效地處理大量數(shù)據(jù),本文整理了一些常見的方法和技巧,需要的可以了解下
    2025-01-01

最新評(píng)論

绵竹市| 会泽县| 长汀县| 舒城县| 巴彦县| 永安市| 西林县| 库伦旗| 交口县| 白山市| 信丰县| 洪雅县| 隆林| 原平市| 蒙阴县| 邵阳县| 孝感市| 阳西县| 盐池县| 永平县| 旺苍县| 广丰县| 太湖县| 利津县| 宁城县| 米林县| 商城县| 肥东县| 呼图壁县| 景谷| 香港 | 于田县| 原平市| 洛扎县| 额敏县| 常德市| 阜平县| 苍梧县| 扶沟县| 务川| 丰城市|