首都青年网 |
  • 手机客户端
  • 微信
您的位置:首页 > 资讯 > 正文
Lyra的Modular Gameplay InitState 状态初始化链条 The Final Part
来源:哔哩哔哩 2023-07-30 17:20:20

各位好,我是Diarica,今天带大家来共同探索Lyra 中的Modular Gameplay初始化链条的基本结构(2)


【资料图】

上一期我们一起了解了Modular Gameplay中一些重要的类,这一期我们会直接围绕着接口去讲它整个初始化的流程。您跟着这两期文章,应当是可以在自己的项目中实现它。

我们这期会拿Lyra的PawnExtensionComponent举例,See how it works

看完以后你可以拿自己的项目去接入这个初始化链条。

我们得知,PawnExtension是添加到Lyra游戏中所有Pawn的,它主要用来负责PawnData,ASC的初始化工作。

在头文件中,可以看到PawnExt重写了以下虚函数,以及一个静态的FName。这个静态的FName是用于标记当前组件的名称以用于初始化。

它在构造函数的上方

InitState的注册

OnRegister中

OnRegister是ActorComponent的一个虚函数,PawnExt重写了它,旨在更早的完成对InitState链条的注册。在这之前也检查了必备的PawnExt组件的数量,如果玩家类上超过1个,那么就触发Ensure。

BeginPlay中

可以看到,Beginplay中绑定了当初始化状态链条变更时的通知,这里我要说一下,去翻了ModularGameplay它的实现,我发现它最终是来到了 OnActorInitStateChanged这个函数之下,PawnExt也实现了它。

同样的,这里也尝试转换状态为Spawned,就是刚刚生成完玩家。

尝试转换状态需要调用TryToChangeInitState这个接口。

EndPlay中 取消注册InitStateFeature

逐一讲解每个函数的作用。

CheckDefaultInitialization

这个函数,主要是检查当前状态的初始化是否完成,是否可以进入下一个状态。

在Lyra中,一些关键对象(如PlayerController PlayerState)的OnRep时会调用它,来检查初始化是否完毕。它的用法详见下张图和下张图的注释。

OnActorInitStateChanged

它是上文提到的,用BindOnActorInitStateChanged();绑定的回调。可以绑定更新到指定状态后的回调,也可以响应所有状态的变化,在PawnExt里是响应所有状态的变化。

PawnExt里做的事情:当其他的对象已经初始化到DataAvailable状态,尝试转换到DataInitialized状态。

HandleToChangeInitState

在PawnExt中,没有特殊处理,主要是交给了HeroComponent。

GetFeatureName

这里顾名思义,获取那个唯一的FName,标识着实现了这个接口的类。

CanChangeInitState

这个是IGameFrameworkInitStateInterface中最复杂的一个方法,它的作用是检查我们当前的初始化是否完成。如果完成后,return true,可以过渡到下一个状态。

重点:Current State是你当前的状态,DisiredState是询问是否可以转换到的状态。

你需要在这里做你自己的一系列判定,判定这个状态的初始化是否已完成。

如:

xx属性在客户端是否有效?

UGameFrameworkComponentManager的静态函数

SendGameFrameworkComponentExtensionEvent

这里主要是当某些特定的内容初始化完成后发送的消息,同样的,也可以绑定特定消息的委托。

例如在HeroComponent中,输入绑定完成后的消息。

到这里,我们的Modular Gameplay初始化链条就讲完了。

确实是比较简洁的系统,把实现逐一拆解就明白了用法。

自然原理也似乎不是那么的难,你也可以自己尝试实现一个初始化链条。

下次再见!

关键词

图片新闻
Copyright @ 2008-2023 www.sdqnw.net All Rights Reserved 首都青年网 版权所有
文章采集互联网,为了传递信息,如有出处与本站无关。 非本站原创,系由网友自助上传或转载、采编于其它媒体,不代表本站的观点和和看法,一切责任由发布者承担,与本站无关!
版权文章处理
联系方式:QQ  39 60 29 14 2 @qq.com  备案号:皖ICP备2022009963号-20