虚幻引擎Gameplay探索 Actor 之间的高效通信与交互技巧二

devtools/2024/9/19 17:38:03/ 标签: 虚幻, 交互, 游戏引擎, Actor通信

Actor通信介绍

虚幻引擎中,Actor 是游戏世界中的基本构建块,类似于 Unity 中的 GameObject。Actor 通信是指不同 Actor 之间如何相互交互和传递信息,这在构建复杂的游戏逻辑时至关重要。以下是对 Actor 通信的详细介绍。

Actor通信方法表:

通信方法使用场景前提条件示例
直接通信需要调用关卡中某一Actor的方法需要引用关卡中的Actor在关卡中的特定Actor上触发事件。
类型转换希望验证Actor是否属于特定类,以便访问其属性。需要引用关卡中的Actor以类型转换到所需的Actor类。访问属于同一父类的子Actor的特定功能。
事件分发器通过一个Actor来触发到多个Actor的事件。其他Actor需要订阅事件,以便对事件作出响应。通知不同类型的Actor:某事件已经触发。
接口当你需要为不同Actor添加相同功能时。需要引用关卡中的Actor,并且该Actor需要实现接口。为不同类型的Actor添加交互行为。

Gameplay框架Actor通信文章首发

通信方法演示

准备工作

打开虚幻引擎–创建新项目–选择游戏–第三人称游戏–勾选初学者内容包。

image.png
本Demo使用最新虚幻引擎版本5.4构建。

事件分发器通信

类似于Unity中的委托事件,全局或局部公开的一个事件分发器,由需要的脚步自由订阅,只要订阅了该事件分发器,当事件触发时,这些订阅者就能收到消息,处理各自的逻辑。

  1. 编写一个持有事件分发器的Actor
    在内容菜单新建一个Actor类型的蓝图类–命令为BP_EeventActor–添加一个Box组件–并在我的蓝图中事件分发器一栏添加+号–添加事件分发器并命名为OnBoxEvent–在事件图表中添加On Component Begin Overlay事件–将事件分发器拖拽到图表中选择调用,连接图如下:
    image.png
    编译保存,并将其放进场景中任意位置
    image.png
  2. 创建第一个事件接收器Actor–BP_CircularReceive
    编写蓝图逻辑,将四个QuarterCylinder隐藏。
    添加一个变量命名为EventActor在细节面板设置变量类型为BP_EevntActor,并设置为公开变量–添加一个变量命名为CylinderList,在细节面板设置变量类型为Static Mesh Actor(数组类型),并设置为公开。–在EvenActor变量细节面板事件栏下添加On Box Event右边的+号,开始编写逻辑:
    image.png
    将BP_CircularReceive拖放到场景中,在细节面板分别赋值变量的引用:
    image.png
  3. 编写第二个事件接收器Actor–BP_ExplosionActor
    在内容菜单里搜索Blueprint_Effect_Explosion,将其复制到自己定义的文件夹中并命名为BP_ExplosionActor–将其拖到场景中圆柱的位置,稍微调整一下位置让在圆柱中间。同上一步一样添加变量Eventor,将其事件完善,这里是启用爆炸效果。
    image.png
    还需要将两个子组件P_Explosion和ExplosionAudio的激活属性Auto Activate取消勾选。最后将其放置场景中并设置变量引用:
    image.png
  4. 测试事件分发器效果
    在这里插入图片描述

接口通信

UE5中,Actor 接口通信是一种非常有效的设计模式,接口负责定义一系列共有的行为或功能,这些行为或功能在不同Actor中可以有不同的实现方法。当你为不同Actor实现了相同类型的功能时,适合使用此通信方法。

本例中,将实现一个简单的交互系统,通过在两个不同Actor间通信,学习接口的用法。

  1. 创建接口
    右键目录空白处创建蓝图接口类
    image.png
    双击打开添加函数命名为Interaction
    在这里插入图片描述

  2. 创建可交互开关的灯
    在内容菜单搜索Blueprint_CeilingLight将其复制到自定义的目录,并重命名为BP_Light–将其放置到场景中。
    双击打开蓝图点击类设置添加接口BPI_Interaction,编译保存后再我的蓝图接口栏下右击Interaction接口选择实现事件可以看到Event Interaction节点自动添加到蓝图中。
    image.png
    编写交替开关灯的逻辑:
    image.png

  3. 创建可交互的球体
    新建一个Actor蓝图类命名为BP_Sphere,添加一个球体组件,同第2步一样添加接口Interaction并实现切换材质的逻辑:
    image.png

  4. 修改玩家蓝图并测试接口事件
    找到蓝图BP_ThirdPersonCharacter,在其OnComponent Begin Overlap事件中添加执行节点Interaction(Message)。
    在这里插入图片描述

编译保存并运行:
在这里插入图片描述

总结

  1. 事件分发器

    • 适合需要广播事件的场景,能够让多个 Actor 响应同一事件,增强了系统的灵活性和扩展性。
  2. 接口

    • 提供了一种灵活的方式为不同类型的 Actor 添加共同的功能。通过接口实现,可以减少代码重复,提高可维护性。

事件分发器和接口都是实现 Actor 之间高效通信的重要工具。事件分发器适用于需要动态广播的场景,而接口则确保了不同 Actor 之间功能的一致性和可重用性。结合这两种方法,开发者可以构建出更具互动性和可扩展性的游戏系统


http://www.ppmy.cn/devtools/113040.html

相关文章

git-fork操作指南

git-fork操作指南 1.fork github仓库2. clone fork仓库3. 分支修改4.与原始仓库保持修改同步4.1添加上游仓库4.2 拉取上游分支4.3 合并更改4.4 推送更改 参考: 有时候我们需要将github的项目fork到自己名下,然后修改并提交pull request,这里将…

计算机毕业设计 二手闲置交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

【Git】Clone

当git clone失败时,出现 RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8) 错误,可能由于网络连接不稳定或仓库太大导致的。 可以尝试以下几种方法来解决这个问题: 增加 Git 的缓冲区大小: git confi…

Java许可政策再变,Oracle JDK 17 免费期将结束!

原文地址:https://www.infoworld.com/article/3478122/get-ready-for-more-java-licensing-changes.html Oracle JDK 17的许可协议将于9月变更回Oracle Technology Network License Agreement,这将迫使用户重新评估他们的使用策略。 有句老话说&#xf…

探索Python中的装饰器

在Python编程中,装饰器是一种非常强大的工具,它允许我们在不改变原有函数代码的情况下,为函数添加额外的功能。本文将深入探讨Python装饰器的概念、工作原理以及如何使用它们来增强代码的功能。 一、装饰器的基本概念装饰器是Python中的一个…

navicate连接oracle数据库probable oracle net admin error

没用过oracle数据库 1、数据库版本19c; 使用dbeaver连接是没有问题的 使用navicate一直报错 解决方案: oracle官网下载win64的OCI环境 https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 下载好的压缩包直接解…

QT设置闹钟超时播报

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimerEvent> #include<QTime> #include<QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic…

SpringMVC中的前置调用

这两天在看一个老项目&#xff0c;用的SpringMVCJSP。因为很久没看SpringMVC&#xff0c;在看一个Controller的时候竟然看不懂了哈哈哈哈~ Controller&#xff1a; Controller RequestMapping("example") FunctionId("F001") public class ExampleContro…

制作炫酷个人网页:用 HTML 和 CSS3 展现你的风格

你是否觉得自己的网站应该看起来更炫酷&#xff1f;今天我将教你如何使用 HTML 和 CSS3 制作一个拥有炫酷动画和现代设计风格的个人网页&#xff0c;让它在任何设备上看起来都无敌酷炫&#xff01; 哈哈哈哈哈哈哈哈,我感觉自己有点中二哈哈哈哈~ 目录 炫酷设计理念构建 HTML …

每天一道面试题(4):Spring Boot 的“约定优于配置”理解

Spring Boot 的“约定优于配置”理解 普通人的回答 在 Spring Boot 中&#xff0c;"约定优于配置"的理念可以减少大量的配置工作&#xff0c;让开发者专注于业务代码的编写。这意味着 Spring Boot 默认提供了许多开箱即用的配置和功能&#xff0c;使得我们不需要手…

PHP智慧家政同城服务家政系统小程序源码

智慧家政&#xff0c;同城服务新篇章 —— 探索家政系统的无限可能 开篇&#xff1a;走进智慧家政时代 在这个快节奏的生活中&#xff0c;每一分每一秒都显得尤为珍贵。当忙碌成为常态&#xff0c;如何让家成为真正的避风港&#xff1f;答案或许就藏在“智慧家政同城服务家政…

深度强化学习Reinforcement Learning|PG|Actor-Critic|A3C|DDPG

目录 一、PG(Policy Gradient)策略梯度算法&#xff08;on-policy&#xff09; 1、策略梯度公式推导 2、代码讲解/伪代码 3、改进 3.1Trick Baseline 3.2 Suitable Credit 二、Actor-Critic算法 三、A3C算法 四、DDPG算法 前言 我们都知道强化学习环境env的不确定性是…

【Android】处理线程中未捕获的异常

需求 项目出现异常问题&#xff0c;获取崩溃信息 实现 定义一个类&#xff0c;实现【Thread.UncaughtExceptionHandler】方法 public class CrashHandler implements Thread.UncaughtExceptionHandler {private static CrashHandler sInstance new CrashHandler();private…

探索CentOS:入门必备基础知识

探索CentOS:入门必备基础知识 CentOS(Community ENTerprise Operating System)是一个基于Red Hat Enterprise Linux(RHEL)的开源操作系统,广泛应用于服务器环境。对于初学者来说,掌握CentOS的基础知识是非常重要的。本文将详细介绍CentOS的安装、基本命令、软件管理、用…

OpenCV结构分析与形状描述符(20)计算一个包围给定点集的最小外接圆函数minEnclosingCircle()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到一个包围二维点集的最小面积的圆。 该函数使用迭代算法来寻找一个二维点集的最小外接圆。这意味着函数将会通过反复逼近的过程来计算出能够…

嵌入式Linux学习笔记(5)-进程间常见通讯方式(c语言实现)

一、概述 进程间通信&#xff08;IPC&#xff0c;InterProcess Communication&#xff09;是指在多个进程之间进行数据传输和共享的机制。在操作系统中&#xff0c;进程是运行中的程序的实例&#xff0c;每个进程都有自己的内存空间和资源。 进程间通信可以用于在不同的进程之间…

网站按钮检测系统源码分享

网站按钮检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

树莓派5上手

1 安装系统 Raspberry Pi OS 是基于 Debian 的免费操作系统&#xff0c;针对 Raspberry Pi 硬件进行了优化。Raspberry Pi OS 支持超过 35,000 个 Debian 软件包。树莓派 5 可以安装各种系统&#xff0c;但是如果对于系统没有特殊的要求&#xff0c;还是安装 Raspberry Pi OS …

基于Keil软件实现读写备份寄存器(江协科技HAL库)

读写备份寄存器实验是基于江协科技STM32的HAL库工程模板创建的(可以在作品“基于江科大STM32创建的HAL库工程模板”中的结尾处获取工程模板的百度网盘链接) 复制“OLED显示”的工程文件——“4-1 OLED显示屏”,并命名为“12-1 读写备份寄存器 ”。打开工程,把下面的程序复…

科技之光,照亮未来之路“2024南京国际人工智能展会”

全球科技产业的版图正以前所未有的速度重构&#xff0c;而位于中国东部沿海经济带的江浙沪地区&#xff0c;作为科技创新与产业升级的高地&#xff0c;始终站在这一浪潮的最前沿。2024年&#xff0c;这一区域的科技盛宴——“2024南京人工智能展会”即将在南京国际博览中心盛大…