欢迎光临散文网 会员登陆 & 注册

Lyra框架01:游戏玩法是怎么开启的?

2023-07-16 20:22 作者:半步游戏设计师  | 我要投稿

在Lyra框架下,Epic将每一次对局定义为一个Experience实例。

Lyra在WorldSetting数据结构内新增了一个字段叫DefaultGameplayExperience,设计者可以通过配置这个值来改变每张地图内所使用的Experience模板。

当这个World(地图)被加载后,在GameMode的初始化函数(ALyraGameMode::InitGame)里调用了如下函数,意味着下一帧跑HandleMatchAssignmentIfNotExpectingOne这个函数:

GetWorld()->GetTimerManager().SetTimerForNextTick(this, &ThisClass::HandleMatchAssignmentIfNotExpectingOne);

而在这个函数里,会读取当前World配置的DefaultGameplayExperience。然后通过GameState上的ULyraExperienceManagerComponent,开始加载Experience里配置的内容。

ULyraExperienceManagerComponent* ExperienceComponent = GameState->FindComponentByClass<ULyraExperienceManagerComponent>();

check(ExperienceComponent);

ExperienceComponent->ServerSetCurrentExperience(ExperienceId);

这里注意GameState是在GameMode的基类里,很早的地方就实例化了。

void AGameModeBase::PreInitializeComponents()

...

UWorld* World = GetWorld();

GameState = World->SpawnActor<AGameStateBase>(GameStateClass, SpawnInfo);

World->SetGameState(GameState);

...

InitGameState();

LyraGameMode覆写了InitGameState,加入了监听OnExperienceLoaded的逻辑。

Experience这个东西非常复杂,用到了GameFeature等各种特性来动态加载Component、加UI、加Input等等,我们先忽略这些。当这些逻辑都跑完了之后,会回调ALyraGameMode::OnExperienceLoaded。在这个函数里,重新生成了所有的PlayerController,游戏逻辑在此展开。

Lyra框架01:游戏玩法是怎么开启的?的评论 (共 条)

分享到微博请遵守国家法律