当前位置: 首页 > article >正文

【UE5 C++课程系列笔记】14——GameInstanceSubsystem与动态多播的简单结合使用

效果

 通过在关卡蓝图中触发GameInstanceSubsystem包含的委托,来触发所有绑定到这个委托的事件,从而实现跨蓝图通信。

步骤

1. 新建一个C++类

这里命名为“SubsystemAndDelegate”

 

引入GameInstanceSubsystem.h,让“SubsystemAndDelegate”继承“UGameInstanceSubsystem”

添加如下代码,让反射系统识别 USubsystemAndDelegate类

声明了一个名为 FSubsystemActorLocation 的动态多播委托类型,该委托类型带有两个参数

再添加一个蓝图可访问的函数“CallLocation”用于调用委托

实现函数“CallLocation”,通过Broadcast触发委托SubsystemActorLocationDelegate

完整头文件代码:

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"

#include "SubsystemAndDelegate.generated.h"

DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FSubsystemActorLocation, FString, InActionName, int32, InActionIndex);

UCLASS()
class STUDY_API USubsystemAndDelegate : public UGameInstanceSubsystem
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable)
	void CallLocation(FString InActionName, int32 InActionIndex);

	UPROPERTY(BlueprintAssignable)
	FSubsystemActorLocation SubsystemActorLocationDelegate;
};

 源文件:

#include "Subsystem/SubsystemAndDelegate.h"

void USubsystemAndDelegate::CallLocation(FString InActionName, int32 InActionIndex)
{
	SubsystemActorLocationDelegate.Broadcast(InActionName, InActionIndex);
}

2. 编译后,新建一个actor蓝图类,这里命名为“BP_WorkActor”,然后将其拖入场景中

打开“BP_WorkActor”,在事件图表中通过“USubsystemAndDelegate”的委托“SubsystemActorLocationDelegate”来绑定委托事件

3. 在关卡蓝图中通过按下1键调用子系统的函数“CallLocation”,从而触发委托绑定的自定义事件

运行效果如下,可以看到按下1键成功触发委托绑定的打印事件


http://www.kler.cn/a/454391.html

相关文章:

  • 深入理解与优化Java二维数组:从定义到性能提升的全面指南
  • 将多个 k8s yaml 配置文件合并为一个文件
  • html + css 淘宝网实战
  • Jensen-Shannon Divergence:定义、性质与应用
  • ssh 完全命令行 登录服务器 , 无需交互的方法
  • Go快速开发框架2.6.0版本更新内容快速了解
  • webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源
  • 【02-数据库面试】
  • 新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
  • 企业销售人员培训系统|Java|SSM|VUE| 前后端分离
  • OPPO Java面试题及参考答案
  • uniapp小程序实现弹幕不重叠
  • 游戏引擎学习第61天
  • Idea 将多个module显示在同一个project
  • Java+Vue 断点续传功能实现
  • 【Java 数据结构】链表的中间结点
  • 【华为OD-E卷-租车骑绿道 100分(python、java、c++、js、c)】
  • C++ 最小栈 - 力扣(LeetCode)
  • 杂项记录一些笔记
  • linux服务器上CentOS的yum和Ubuntu包管理工具apt区别与使用实战
  • AIOps平台的功能对比:如何选择适合的解决方案?
  • 简单贪吃蛇小游戏的设计与实现
  • es创建的索引状态一直是red
  • Effective C++ 条款 09:绝不在构造和析构过程中调用 virtual 函数
  • python操作Elasticsearch执行增删改查
  • 十二月第23讲:.NET 9 New features-AOT相关的改进