Lyra学习笔记 Experience流程梳理

06-01 1631阅读

目录

  • 前言
  • 1 创建
  • 2 加载
  • 3 Deactivate
  • 4 总结与图示

    前言

    这篇主要将视角放在Experience的流程,所以不会涉及一些更深的东西

    之后ULyraExperienceManagerComponent简称为EMC

    1 创建

    完事开头难,首先找到了管理Experience的组件,那么它的初始化位置在哪?

    其作为ALyraGameState的成员,在构造函数中用CreateDefaultSubobject创建。

    //LyraGameState.h
    private:
    	// Handles loading and managing the current gameplay experience
    	UPROPERTY()
    	TObjectPtr
    	ExperienceManagerComponent;
    //LyraGameState.cpp
    ALyraGameState::ALyraGameState(const FObjectInitializer& ObjectInitializer)
    	: Super(ObjectInitializer)
    {
    	...
    	ExperienceManagerComponent = CreateDefaultSubobject(TEXT("ExperienceManagerComponent"));
    	...
    }
    

    2 加载

    结合EMC中的这个枚举梳理,初始为Unloaded:

    //LyraExperienceManagerComponent.h
    ELyraExperienceLoadState LoadState = ELyraExperienceLoadState::Unloaded;
    //其定义
    enum class ELyraExperienceLoadState
    {
    	Unloaded,
    	Loading,
    	LoadingGameFeatures,
    	LoadingChaosTestingDelay,
    	ExecutingActions,
    	Loaded,
    	Deactivating
    };
    

    结合之前的地图加载流程分析,加载的流程开始于ULyraExperienceManagerComponent::SetCurrentExperience->

    ULyraExperienceManagerComponent::StartExperienceLoad中LoadState转为Loading->

    ULyraExperienceManagerComponent::OnExperienceLoadComplete中收集完所有的GameFeaturesToEnable后,LoadState 转为LoadingGameFeatures->

    对于每个GF,执行ULyraExperienceManager::NotifyOfPluginActivation和UGameFeaturesSubsystem::Get().LoadAndActivateGameFeaturePlugin->

    先忽略测试用状态LoadingChaosTestingDelay

    ULyraExperienceManagerComponent::OnExperienceFullLoadCompleted中状态转为ExecutingActions并开始执行Actions,执行顺序为Experience本身Acitons中的每一个Action、遍历ActionSets,每一个ActionSets的Actions的每一个Action,对于单个Action,顺序执行OnGameFeatureRegistering()、OnGameFeatureLoading()、OnGameFeatureActivating(Context)->

    Action执行完成后,状态进入Loaded,然后分别是OnExperienceLoaded三个优先级的多播

    3 Deactivate

    EndPlay触发DeActive->

    DeActive涉及的GameFeature->

    状态转为Deactivating->

    同理按顺序触发每个Action的OnGameFeatureDeactivating、OnGameFeatureUnregistering()->

    状态转为Unloaded ,CurrentExperience = nullptr;

    4 总结与图示

    Lyra学习笔记 Experience流程梳理

    Lyra学习笔记 Experience流程梳理

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码