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

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

Lyra框架02:角色是怎么創(chuàng)建出來的

2023-07-17 04:08 作者:半步游戲設(shè)計(jì)師  | 我要投稿

Lyra的創(chuàng)建角色是圍繞PawnData這個(gè)數(shù)據(jù)結(jié)構(gòu),和OnExperienceLoaded這個(gè)時(shí)間節(jié)點(diǎn)。

首先推薦一個(gè)文章先看明白GameMode的初始化流程。

https://zhuanlan.zhihu.com/p/70045930

按時(shí)間順序排列:

在UEngine::LoadMap中,首先調(diào)用UWorld::InitializeActorsForPlay初始化所有在場景里已經(jīng)存在的Actor。

在這個(gè)函數(shù)內(nèi),AGameModeBase::PreInitializeComponents階段,GameState被初始化的同時(shí)也將ALyraGameMode::OnExperienceLoaded注冊到了委托上。

其他放在場景里的Character或是Pawn,在APawn::PostInitializeComponents階段,根據(jù)AutoPossessAI的設(shè)定,開始創(chuàng)建AIController。

而ALyraPlayerBotController中使用了bWantsPlayerState = true,因此也會(huì)獲得一個(gè)LyraPlayerState,從而在ALyraPlayerState::PostInitializeComponents階段,ALyraPlayerState::OnExperienceLoaded也注冊到了委托上。

在后續(xù)的階段,當(dāng)PlayerController被創(chuàng)建時(shí),隨著LyraPlayerState被實(shí)例化,在ALyraPlayerState::PostInitializeComponents階段,ALyraPlayerState::OnExperienceLoaded也注冊到了委托上。


當(dāng)Actors都準(zhǔn)備好了時(shí),我們開始關(guān)注ExperienceLoaded之后的執(zhí)行邏輯。

在ALyraGameMode::InitGame中,通過SetTimerForNextTick,保證下一幀才開始真正跑Experience的邏輯。

在ALyraGameMode::OnExperienceLoaded中,嘗試通過AGameModeBase::RestartPlayerAtPlayerStart重置所有PlayerController。

在這個(gè)過程中需要查詢PawnData數(shù)據(jù),ALyraGameMode::GetPawnDataForController函數(shù)中寫了從LyraPlayerState上取的邏輯。這個(gè)PawnData是哪來的呢?一看原來是ALyraPlayerState::OnExperienceLoaded里,從GameMode上再調(diào)GetPawnDataForController取。

還是在這個(gè)過程中,在?ALyraGameMode::SpawnDefaultPawnAtTransform_Implementation的實(shí)現(xiàn)里,又取了一次PawnData直接生成了Pawn,然后還調(diào)用了上面的ULyraPawnExtensionComponent::SetPawnData。

目前只有HeroComponent和PawnExtensionComponent用到了這個(gè)IGameFrameworkInitStateInterface。這個(gè)模塊是用來管理BeginPlay里的邏輯時(shí)序的。

PawnExtensionComponent通過PawnData卡住所有其他用到這個(gè)模塊的Component,來保證數(shù)據(jù)可用性。

我們重新捋一下時(shí)序。

1. LyraGameMode最先注冊,也最先執(zhí)行OnExperienceLoaded回調(diào)函數(shù),此時(shí)PlayerState的OnExperienceLoaded還沒有回調(diào),因此取不到PlayerState上的PawnData,所以取ExperienceManager上的默認(rèn)Experience實(shí)例。

2. LyraPlayerState執(zhí)行OnExperienceLoaded回調(diào)函數(shù),此時(shí)同上,還是取到了默認(rèn)Experience實(shí)例。然后記錄下來。后續(xù)其他地方如果要取就從PlayerState上取,應(yīng)該是因?yàn)镚ameMode只在服務(wù)器上有,客戶端取不到。

3. HeroComponent和PawnExtensionComponent在BeginPlay階段,交替切換階段,最終完成基于PawnData的輸入、能力初始化。



注:SpawnActor的流程:

https://zhuanlan.zhihu.com/p/411549290





Lyra框架02:角色是怎么創(chuàng)建出來的的評論 (共 條)

分享到微博請遵守國家法律
成武县| 西平县| 九江市| 通山县| 加查县| 普陀区| 峨眉山市| 通化市| 鹤岗市| 紫阳县| 六枝特区| 德清县| 南漳县| 平定县| 辽阳县| 布尔津县| 济宁市| 新野县| 且末县| 米林县| SHOW| 怀仁县| 武山县| 吕梁市| 迭部县| 牡丹江市| 资兴市| 塔城市| 阜康市| 克东县| 门头沟区| 清镇市| 田林县| 临夏市| 龙游县| 寻甸| 泰和县| 山丹县| 谷城县| 博兴县| 金昌市|