UE5 GameFeature Runtime Load and Unload

UE5 GameFeature Runtime Load and Unload

说明

Project name = PluginTest

GameFeature Plugin name = RarSceneChange


蓝图

在蓝图中调用函数Execute Console Command写入如下命令

Load: LoadGameFeaturePlugin RarSceneChange

UnLoad: UnLoadGameFeaturePlugin RarSceneChange


C++

准备工作

  1. build.cs引入模块
    PublicDependencyModuleNames.AddRange("GameFeatures")
    
    回到Unreal Editor中 refresh Visual studio project
  2. PluginURL
    FString PluginURL;
    UGameFeaturesSubsystem::Get().GetPluginURLByName(FString("RarSceneChange"), PluginURL);
    
    需要注意的是要引入头文件 #include "GameFeaturesSubsystem.h"

LoadAndActivate:

  1. LoadAndActivateGameFeaturePlugin()

    观察这个函数的定义,发现需要一个委托
    void LoadAndActivateGameFeaturePlugin(const FString& PluginURL, const FGameFeaturePluginLoadComplete& CompleteDelegate);
    
    这个委托的定义如下
    DECLARE_DELEGATE_OneParam(FGameFeaturePluginChangeStateComplete, const UE::GameFeatures::FResult& /*Result*/);
    using FGameFeaturePluginLoadComplete = FGameFeaturePluginChangeStateComplete;
    
    这是一个单播委托,需要传入参数const UE::GameFeatures::FResult&,建立自己的回调函数
    void APluginTestCharacter::OnGameFeaturePluginActiveEnd(const UE::GameFeatures::FResult& Result)
    {
        //GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow,Result.GetError());
    }
    
    这里需要注意两个地方:

    * Result.GetError()在GameFeature Load成功后为空值,如果此时还调用的话,运行游戏会出现崩溃

    就像上面这种情况,我想查看是否Load成功,游戏却一直崩溃

    * UE::GameFeatures::FResult& Result需要包含头文件#include "GameFeaturePluginOperationResult.h"

  2. 调用
    UGameFeaturesSubsystem::Get().LoadAndActivateGameFeaturePlugin(PluginURL, FGameFeaturePluginLoadComplete::CreateUObject(this, &ThisClass::OnGameFeaturePluginActiveEnd));
    

UnLoad:

UGameFeaturesSubsystem::Get().UnloadGameFeaturePlugin(PluginURL);

UnLoad有两种API可供使用:

void UnloadGameFeaturePlugin(const FString& PluginURL, bool bKeepRegistered = false);
void UnloadGameFeaturePlugin(const FString& PluginURL, const FGameFeaturePluginUnloadComplete& CompleteDelegate, bool bKeepRegistered = false);

我使用的是第一种,不需要回调函数

最后,本文只是简单介绍了GameFeature的加载卸载过程,笔主也只是一个菜鸡,写文章主要是为了记录学习过程

关于GameFeature的用法,可以参考下面几个链接:

https://www.youtube.com/watch?v=IYbMDWZHqzg

https://www.youtube.com/watch?v=HgnkfFWoHwk

https://www.bilibili.com/read/cv16902351?from=search

最后是大钊关于GameFeature架构的分析(膜拜.jpg),很值得一看

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MustardJim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值