五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Lyra的Modular Gameplay InitState 狀態(tài)初始化鏈條 The Final Part

2023-07-30 17:07 作者:Diarica  | 我要投稿

各位好,我是Diarica,今天帶大家來(lái)共同探索Lyra 中的Modular Gameplay初始化鏈條的基本結(jié)構(gòu)(2)

上一期我們一起了解了Modular Gameplay中一些重要的類(lèi),這一期我們會(huì)直接圍繞著接口去講它整個(gè)初始化的流程。您跟著這兩期文章,應(yīng)當(dāng)是可以在自己的項(xiàng)目中實(shí)現(xiàn)它。


我們這期會(huì)拿Lyra的PawnExtensionComponent舉例,See how it works

看完以后你可以拿自己的項(xiàng)目去接入這個(gè)初始化鏈條。

PawnExt頭部的注釋

我們得知,PawnExtension是添加到Lyra游戲中所有Pawn的,它主要用來(lái)負(fù)責(zé)PawnData,ASC的初始化工作。


The implementation of IGameFrameworkInitStateInterface

在頭文件中,可以看到PawnExt重寫(xiě)了以下虛函數(shù),以及一個(gè)靜態(tài)的FName。這個(gè)靜態(tài)的FName是用于標(biāo)記當(dāng)前組件的名稱以用于初始化。

它在構(gòu)造函數(shù)的上方

InitState的注冊(cè)

OnRegister中

OnRegister

OnRegister是ActorComponent的一個(gè)虛函數(shù),PawnExt重寫(xiě)了它,旨在更早的完成對(duì)InitState鏈條的注冊(cè)。在這之前也檢查了必備的PawnExt組件的數(shù)量,如果玩家類(lèi)上超過(guò)1個(gè),那么就觸發(fā)Ensure。


BeginPlay中

可以看到,Beginplay中綁定了當(dāng)初始化狀態(tài)鏈條變更時(shí)的通知,這里我要說(shuō)一下,去翻了ModularGameplay它的實(shí)現(xiàn),我發(fā)現(xiàn)它最終是來(lái)到了 OnActorInitStateChanged這個(gè)函數(shù)之下,PawnExt也實(shí)現(xiàn)了它。

同樣的,這里也嘗試轉(zhuǎn)換狀態(tài)為Spawned,就是剛剛生成完玩家。

嘗試轉(zhuǎn)換狀態(tài)需要調(diào)用TryToChangeInitState這個(gè)接口。


EndPlay中 取消注冊(cè)InitStateFeature





逐一講解每個(gè)函數(shù)的作用。

CheckDefaultInitialization

這個(gè)函數(shù),主要是檢查當(dāng)前狀態(tài)的初始化是否完成,是否可以進(jìn)入下一個(gè)狀態(tài)。

在Lyra中,一些關(guān)鍵對(duì)象(如PlayerController PlayerState)的OnRep時(shí)會(huì)調(diào)用它,來(lái)檢查初始化是否完畢。它的用法詳見(jiàn)下張圖和下張圖的注釋。


Lyra在很多地方都調(diào)用了CheckDefaultInitialization,它主要是為了檢查初始化是否完成,能否進(jìn)入下一個(gè)初始化狀態(tài)。在HandleControllerReplicated等OnRep函數(shù)中調(diào)用的原因主要是PawnExtension依賴于一些屬性復(fù)制到客戶端。當(dāng)它們復(fù)制完成后,檢查是否可以完成初始化。你的項(xiàng)目可以參考這點(diǎn),在關(guān)鍵數(shù)據(jù)或?qū)傩酝降娇蛻舳撕髾z查初始化。

OnActorInitStateChanged

它是上文提到的,用BindOnActorInitStateChanged();綁定的回調(diào)??梢越壎ǜ碌街付顟B(tài)后的回調(diào),也可以響應(yīng)所有狀態(tài)的變化,在PawnExt里是響應(yīng)所有狀態(tài)的變化。

PawnExt里做的事情:當(dāng)其他的對(duì)象已經(jīng)初始化到DataAvailable狀態(tài),嘗試轉(zhuǎn)換到DataInitialized狀態(tài)。


HandleToChangeInitState

在PawnExt中,沒(méi)有特殊處理,主要是交給了HeroComponent。


GetFeatureName

這里顧名思義,獲取那個(gè)唯一的FName,標(biāo)識(shí)著實(shí)現(xiàn)了這個(gè)接口的類(lèi)。


CanChangeInitState

這個(gè)是IGameFrameworkInitStateInterface中最復(fù)雜的一個(gè)方法,它的作用是檢查我們當(dāng)前的初始化是否完成。如果完成后,return true,可以過(guò)渡到下一個(gè)狀態(tài)。

重點(diǎn):Current State是你當(dāng)前的狀態(tài),DisiredState是詢問(wèn)是否可以轉(zhuǎn)換到的狀態(tài)。

你需要在這里做你自己的一系列判定,判定這個(gè)狀態(tài)的初始化是否已完成。

如:

xx屬性在客戶端是否有效?




UGameFrameworkComponentManager的靜態(tài)函數(shù)

SendGameFrameworkComponentExtensionEvent

這里主要是當(dāng)某些特定的內(nèi)容初始化完成后發(fā)送的消息,同樣的,也可以綁定特定消息的委托。

例如在HeroComponent中,輸入綁定完成后的消息。


到這里,我們的Modular Gameplay初始化鏈條就講完了。

確實(shí)是比較簡(jiǎn)潔的系統(tǒng),把實(shí)現(xiàn)逐一拆解就明白了用法。

自然原理也似乎不是那么的難,你也可以自己嘗試實(shí)現(xiàn)一個(gè)初始化鏈條。


下次再見(jiàn)!

我家孩子


Lyra的Modular Gameplay InitState 狀態(tài)初始化鏈條 The Final Part的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
嘉善县| 日喀则市| 广昌县| 正定县| 崇仁县| 南部县| 普宁市| 仁怀市| 清涧县| 上思县| 宁蒗| 无棣县| 桐庐县| 靖江市| 呼玛县| 石河子市| 云安县| 章丘市| 内丘县| 嵩明县| 福安市| 遂川县| 行唐县| 肇源县| 兴义市| 纳雍县| 台湾省| 石首市| 巴里| 仙桃市| 清水河县| 青川县| 安岳县| 河西区| 门源| 正镶白旗| 青铜峡市| 拉孜县| 新巴尔虎右旗| 嘉鱼县| 四会市|