国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity之組件的生命周期

這篇具有很好參考價(jià)值的文章主要介紹了Unity之組件的生命周期。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

PS:第二天,依舊在摸魚(yú)學(xué)unity

一、組件的概念

我本身是由Web后端轉(zhuǎn)到了游戲后端,最近因?yàn)楣ぷ髟蛟趯W(xué)ET框架。學(xué)到了 ECS 編程模式開(kāi)發(fā)(E —— Entity,C —— Component , S —— System)實(shí)體、組件、邏輯開(kāi)發(fā)。

我是這么理解的:組件是掛載到實(shí)體上的,組件中記錄了實(shí)體所需要的數(shù)據(jù),然后實(shí)體的業(yè)務(wù)和行為在邏輯里編寫(xiě)。


舉個(gè)例子:關(guān)羽拿青龍偃月刀斬了顏良,這里關(guān)羽看做實(shí)體,青龍偃月刀作為組件掛載在關(guān)羽身上,斬顏良是實(shí)體關(guān)羽所做出來(lái)的行為動(dòng)作。

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎偷的表情包(手動(dòng)狗頭)

?那么問(wèn)題來(lái)了:關(guān)羽可以拿刀砍人;我可以拿刀砍人;在看博客的你也可以拿刀砍人,難不成每次寫(xiě)程序都要新寫(xiě)一個(gè)刀組件?


寫(xiě)程序就要學(xué)會(huì)偷懶,游戲引擎的開(kāi)發(fā)者們就把一些可以共用的組件抽出來(lái),比如Unity里的Box Collider? ——? 碰撞組件、Rigidbody? ——? 重力組件(剛學(xué)Unity第二天一共就知道這倆 —— doge.jpg)

二、創(chuàng)建新組件并掛載

說(shuō)到這里大家大概明白什么是組件了吧,這里我們創(chuàng)建一個(gè)新組件。在項(xiàng)目一欄的空白處點(diǎn)擊鼠標(biāo)右鍵創(chuàng)建一個(gè)C#腳本,我這里給它命名為Move。

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

如果我們想把組件添加到實(shí)體上,我目前知道的有三種方式

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

?或者點(diǎn)擊添加組件按鈕進(jìn)行搜索

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

?這樣我們就把組件掛到實(shí)體上了。

三、組件的生命周期函數(shù)

說(shuō)完了怎么掛載組件我們正式進(jìn)入正題,來(lái)談?wù)劷M件的生命周期。所謂生命周期就是一個(gè)事物由創(chuàng)建到銷毀的全過(guò)程。

我們雙擊打開(kāi)創(chuàng)建好的C#腳本,它會(huì)打開(kāi)編輯器,我這里用的是visual studio,打開(kāi)后會(huì)看到下邊這段代碼:

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

public class Move: MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

?這里的? Start()Update() 是生命周期中的兩種函數(shù),此外還有?Awake()?、OnEnable()?、LateUpdate()?、FixedUpdate()?、OnDisable()?、OnDestroy()???,一共八種,我們來(lái)看一下這些生命周期函數(shù)。

3.1? Awake()

Awake? ——? 喚醒,這是當(dāng)組件掛載在實(shí)體上第一個(gè)要執(zhí)行的函數(shù),慶祝誕生。我們來(lái)把 Debug.Log("awake");?? 的注釋解開(kāi)在控制臺(tái)打印輸出一下看看。

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎很簡(jiǎn)單接著往下看?

3.2 OnEnable()

OnEnable()??函數(shù)在Awake執(zhí)行之后執(zhí)行,每次激活組件都會(huì)調(diào)用一次,打印一下Log日志

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎看起來(lái)不難,但是這里的每次激活組件都會(huì)調(diào)用一次

每次激活??都會(huì)調(diào)用一次?? 來(lái)詳細(xì)看,這個(gè)Move腳本旁邊的? ?“√”? ?勾上就是激活,不勾就是不激活,我們反復(fù)勾一下可以看到下邊控制臺(tái)? awake? 只執(zhí)行了一次,而??OnEnable? 執(zhí)行了多次,這就是所謂的??每次激活組件都會(huì)調(diào)用一次。

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

3.3??Start()

?調(diào)用時(shí)機(jī)是第一次 OnEnable() 調(diào)用之后,只調(diào)用一次

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎我們來(lái)打印輸出一下:

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎反復(fù)激活后可以看到 Start()只執(zhí)行了一次。

3.4? Update()

Update() 每幀都會(huì)調(diào)用一次,幀數(shù)就是在1秒鐘時(shí)間里傳輸?shù)膱D片的數(shù)量 和電腦的性能有關(guān)

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎可以看到我剛運(yùn)行一會(huì)就打印了一千多次了

3.5?LateUpdate()

LateUpdate(),看函數(shù)名就能猜出大概的作用,在 Update() 函數(shù)執(zhí)行之后執(zhí)行

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

3.6?FixedUpdate()

FixedUpdate()? 每隔固定的時(shí)間間隔都會(huì)運(yùn)行一次,和幀無(wú)關(guān)。

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

我第一次學(xué)這個(gè)函數(shù)的時(shí)候差點(diǎn)和? Update()? 混了。


舉個(gè)例子: 當(dāng)用?Update() 函數(shù)的時(shí)候,關(guān)羽每秒可以砍 60 個(gè)人,而我每秒只能砍一個(gè)人還差點(diǎn)被反殺。

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

而當(dāng)用? FixedUpdate()? 函數(shù)的話我和關(guān)羽每秒砍的人數(shù)就一樣了? ?約等于? ?我和關(guān)羽一樣強(qiáng)(doge.jpg)


FixedUpdate() 函數(shù)默認(rèn)每隔0.02秒執(zhí)行一次。這里我們可以修改執(zhí)行的時(shí)間間隔? ——??在unity界面上邊菜單欄里 ?編輯——》 項(xiàng)目設(shè)置 ——》 時(shí)間 ——》 固定時(shí)間步進(jìn)

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

3.7?OnDisable()

非激活狀態(tài)下調(diào)用一次,和OnEnable是相對(duì)的關(guān)系。OnEnable()??函數(shù)懂了大家這個(gè)也就懂了吧??,我們反復(fù)激活,來(lái)打印輸出一下看看

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎沒(méi)錯(cuò),就是大家想的那樣,激活 OnEnable()就會(huì)執(zhí)行一次,不激活OnDisable() 就會(huì)執(zhí)行一次。

3.8?OnDestroy()

終于最后一個(gè)函數(shù)了,當(dāng)組件銷毀的時(shí)候被調(diào)用,比如進(jìn)行移除組件操作,要死了寫(xiě)遺書(shū)。

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

我們來(lái)移除組件:

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

移除后 OnDestory? 就會(huì)打印出來(lái)了

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

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

public class Move : MonoBehaviour
{
    //組件掛載在實(shí)體上第一個(gè)執(zhí)行的函數(shù),慶祝誕生
    private void Awake()
    {
        Debug.Log("awake");
    }

    //在Awake執(zhí)行之后執(zhí)行,每次激活組件都會(huì)調(diào)用一次
    private void OnEnable()
    {
        Debug.Log("OnEnable");
    }

    //唯一調(diào)用的,調(diào)用時(shí)機(jī)是第一次 OnEnable 調(diào)用之后
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Start");
        //Debug.Log("我是move腳本");
    }

    //每一幀都會(huì)調(diào)用一次,幀和電腦性能有關(guān)
    // Update is called once per frame
    void Update()
    {
        //Debug.Log("Update");
    }

    //Update每次執(zhí)行完都會(huì)跟著執(zhí)行一次
    private void LateUpdate()
    {
        //Debug.Log("LateUpdate");
    }

    //和幀無(wú)關(guān),每隔固定的時(shí)間間隔都會(huì)運(yùn)行一次,默認(rèn)每隔0.02秒執(zhí)行一次
    //在unity界面上邊菜單欄里  編輯——》 項(xiàng)目設(shè)置 ——》 時(shí)間 ——》 固定時(shí)間步進(jìn)
    private void FixedUpdate()
    {
        //Debug.Log("FixedUpdate");
    }

    //非激活狀態(tài)下調(diào)用一次,和OnEnable是相對(duì)的關(guān)系
    private void OnDisable()
    {
        Debug.Log("OnDisable");
    }

    //當(dāng)組件銷毀的時(shí)候被調(diào)用,比如進(jìn)行移除組件操作,要死了寫(xiě)遺書(shū)
    private void OnDestroy()
    {
        Debug.Log("OnDestroy");
    }
}

四、組件的執(zhí)行順序問(wèn)題

通過(guò)組件的生命周期函數(shù)我們知道了8個(gè)方法在什么情況下會(huì)執(zhí)行以及執(zhí)行的順序,那么組件與組件之間的執(zhí)行順序呢?? ?這是我們通過(guò)設(shè)置腳本執(zhí)行順序來(lái)控制的

我們?cè)賮?lái)創(chuàng)建一個(gè)腳本組件test,分別在Start方法里L(fēng)og輸出一下我是test腳本? 和? 我是Move腳本

然后把這兩個(gè)組件掛載在同一個(gè)實(shí)體上,然后對(duì)執(zhí)行順序進(jìn)行設(shè)置。

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎?我們打印輸出一下:設(shè)置的數(shù)值越小就越先執(zhí)行

Unity之組件的生命周期,摸魚(yú)學(xué)Unity,unity,游戲引擎

好了,到此本篇博客知識(shí)點(diǎn)全部講完了,拜拜┏(^0^)┛?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-781559.html

到了這里,關(guān)于Unity之組件的生命周期的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Unity學(xué)習(xí)筆記】生命周期

    【Unity學(xué)習(xí)筆記】生命周期

    官方文檔:事件函數(shù)的執(zhí)行順序 如圖: 腳本的生命周期主要經(jīng)歷以下幾個(gè)階段: 初始化階段,(包括初始化Awake,OnEnable,然后Editor的Reset被穿插在著初始化過(guò)程之間,因此我們可以在腳本里重寫(xiě)Reset方法,這將在編輯器中的game的start之前執(zhí)行。最后Start),當(dāng)我們開(kāi)始游戲的

    2024年02月14日
    瀏覽(35)
  • Unity-生命周期

    Unity-生命周期

    Unity 中,有一個(gè)特別重要的知識(shí)點(diǎn),生命周期函數(shù)。這些東西全部都是系統(tǒng)定義好的,運(yùn)行時(shí)自動(dòng)調(diào)用,但需要繼承 MonoBehaviour 類才能使用。這個(gè)類是從 Unity 中創(chuàng)建腳本就自動(dòng)繼承了。 正是因?yàn)槔^承了 MonoBehaviour 這個(gè)類,Unity 才能依次調(diào)用我們的腳本代碼,執(zhí)行游戲邏輯。

    2024年02月03日
    瀏覽(15)
  • Unity 腳本的生命周期

    Unity 腳本的生命周期

    Unity 腳本的生命周期有哪些?什么時(shí)機(jī)會(huì)觸發(fā)/執(zhí)行?什么時(shí)候用? 手冊(cè) Unity 手冊(cè)地址 生命周期 初始化 方法說(shuō)明: Awake:當(dāng)物體載入時(shí)立即調(diào)用一次,在 Start 函數(shù)之前調(diào)用。 OnEnable:在腳本對(duì)象啟用時(shí)調(diào)用。 Start:僅當(dāng)啟用腳本實(shí)例時(shí),才會(huì)在第一幀調(diào)用。 Reset:編輯器下

    2024年04月09日
    瀏覽(21)
  • unity生命周期簡(jiǎn)單敘述

    1Awake(),2 OnEnable(), 3 Start(), 4 FixedUpdate(), 5 Update(), 6 LateUpdate(), 7 OnGUI(), 8 OnDisable(), 9 OnDestroy(). 特殊一點(diǎn)的方法Reset() Reset 方法是在編輯器中調(diào)用的,并且僅在以下情況下執(zhí)行: 腳本組件被添加到 GameObject 上: 當(dāng)你將一個(gè)腳本組件添加到一個(gè) GameObject 上時(shí),如果該腳本包含 Re

    2024年02月04日
    瀏覽(22)
  • 【Unity函數(shù)執(zhí)行順序(Unity腳本生命周期函數(shù))】

    【Unity函數(shù)執(zhí)行順序(Unity腳本生命周期函數(shù))】

    溫故而知新,下面我將介紹Unity入門需要了解的常用生命周期函數(shù) 生命周期函數(shù)就是該腳本對(duì)象依附的GameObject對(duì)象從出生到消亡整個(gè)生命周期中 會(huì)通過(guò)反射自動(dòng)調(diào)用的一些特殊函數(shù)。 下面是對(duì)各個(gè)函數(shù)解鎖 a.調(diào)用情況: 1.在加載場(chǎng)景時(shí)初始化包含腳本激活狀態(tài)的GameObject時(shí)。

    2023年04月23日
    瀏覽(33)
  • unity 打磚塊—休閑小游戲,摸魚(yú)必備(完整代碼)

    unity 打磚塊—休閑小游戲,摸魚(yú)必備(完整代碼)

    打磚塊小游戲通常會(huì)被當(dāng)做Unity學(xué)習(xí)的第一個(gè)案例,下面給大家介紹如何實(shí)現(xiàn)打磚塊案例的 ? ?建立cube,大體這個(gè)樣子,可以建造自己喜歡的形狀和顏色。 給正方形的cube添加剛體 ?將攝像機(jī)的位置對(duì)準(zhǔn)創(chuàng)建的物體 創(chuàng)建一個(gè)“子彈”,添加鋼體,然后拖動(dòng)到文件夾,變成預(yù)設(shè)

    2023年04月08日
    瀏覽(38)
  • Unity MonoBehaviour事件函數(shù)的生命周期

    Unity MonoBehaviour事件函數(shù)的生命周期

    Unity運(yùn)行時(shí)候的默認(rèn)的幾個(gè)函數(shù)的執(zhí)行順序: 首先是Awake,OnEnable,Start等,后面是FixUpdate Update 最后是OnDisable、OnDestroy

    2024年02月10日
    瀏覽(17)
  • unity的函數(shù)生命周期以及靜態(tài)生成方法

    unity的函數(shù)生命周期以及靜態(tài)生成方法

    前段時(shí)間畢業(yè)了,到處跑著玩,玩傻了之后入職了又摸了一個(gè)多月魚(yú)~收收心了,近期的學(xué)習(xí)計(jì)劃是下半年入門圖形學(xué),九月中旬把線性代數(shù)學(xué)完,所以u(píng)nity和游戲開(kāi)發(fā)的文章還是很少更新了,等后期學(xué)習(xí)圖形學(xué)再慢慢更新和學(xué)習(xí)記錄吧,中間工作中遇到的一些問(wèn)題還是會(huì)記錄

    2024年02月03日
    瀏覽(20)
  • Unity 關(guān)于生命周期函數(shù)的一些認(rèn)識(shí)

    Unity 關(guān)于生命周期函數(shù)的一些認(rèn)識(shí)

    Unity 生命周期函數(shù)主要有以下一些: Awake() : 在腳本被加載時(shí)調(diào)用。用于初始化對(duì)象的狀態(tài)和引用。 OnEnable() : 在腳本組件被啟用時(shí)調(diào)用。在腳本組件被激活時(shí)執(zhí)行一次,以及在腳本組件被重新激活時(shí)執(zhí)行。 Reset() : 在腳本組件被重置時(shí)調(diào)用。用于重置腳本的初始狀態(tài)。 Start

    2024年01月21日
    瀏覽(26)
  • Unity中常見(jiàn)的腳本生命周期函數(shù)及順序

    以下是Unity中常見(jiàn)的腳本生命周期函數(shù)的順序: Awake():當(dāng)對(duì)象被創(chuàng)建時(shí)調(diào)用,用于初始化對(duì)象的引用和狀態(tài)。 OnEnable():在對(duì)象變?yōu)榧せ顮顟B(tài)時(shí)調(diào)用,用于進(jìn)行初始化操作。 Start():在 Awake 之后調(diào)用,用于在對(duì)象被啟用前進(jìn)行初始化操作。 FixedUpdate():固定的時(shí)間間隔(一般

    2024年02月06日
    瀏覽(40)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包