UE学习篇ContentExample解读------Blueprint_Communication-下

news2024/11/19 14:41:28

文章目录

  • 总览描述
  • 批次阅览
    • 2.1 Using an Event Dispatcher function to call an event in the level Blueprint
    • 2.2 Binding an Event Dispatcher function to a custom event
    • 2.3 Binding an Event Dispathcer to a custom event on spawn
    • 3.1 Basic communication using a Blueprint Interface function
  • 概念总结
    • 致谢:

咱们继续蓝图通信下半段章节的学习!

总览描述

在这里插入图片描述

打开关卡后,引入眼帘的就是针对关卡的总体性文字描述,这里翻译一下:

​ 这个地图提供蓝图之间通信的各种方式的案例!主要包括:通过Cast直接通信、使用事件分发器、通过蓝图接口

批次阅览

2.1 Using an Event Dispatcher function to call an event in the level Blueprint

在关卡蓝图中使用一个事件分发器来调用一个事件

在这里插入图片描述

此示例是一个按钮蓝图通过事件分发器来触发灯泡的开和关.这个按钮调用事件分发器,它会在关卡蓝图产生一个事件触发灯的开关.

关键概念:

  • Event Dispatcher

    在这里插入图片描述

蓝图分析:

整体上基本包括两个蓝图:按钮蓝图和灯泡蓝图,咱们分别看一下

按钮蓝图

  • Actor的Component结构
    在这里插入图片描述

​ 它就是一个根组件带了两个组件,一个静态网格体组件,一个触发盒子组件。

  • 构造函数
    在这里插入图片描述

​ 创建一个材质实例,提升为变量,用它设置了静态网格体的材质。

  • 事件图表
    在这里插入图片描述

​ 主要的逻辑就是重写了触发盒子的重叠事件,设置了材质实例的State参数用于设置按钮的不同颜色,然后Call了一个Button Toggled的事件触发器函数!
重点关注一下这个Button Toggle:

在这里插入图片描述

它是按钮类定义的一个事件分发器, 它具有一个bool类型的输入参数.

什么是Event Dispatcher? 你可以把它理解为一个大喇叭,, Call 它就代表对着喇叭喊了一声, 至于有哪些人听到喇叭声并做出什么反馈,它并不关心。如果有人想要对这个喇叭声做出反应,它可以自主选择绑定某个按钮蓝图实例的事件分发器。

更加简洁的说, 它是一个一对多通信的好中介,解耦了发送方和接收方。发消息者只管发,并不知道有多少接收者,也不知道每个接收者收到消息后做出什么反反应 !

进入关卡蓝图

在这里插入图片描述

我们发现了,这里绑定了关卡中这个按钮蓝图实例的事件分发器,从而触发BP_Lighjt_Buld_Basic_2这个蓝图实例的开灯和关灯,完成逻辑!这里我们就不看灯泡蓝图相关的,重点关注事件分发器的用法!

通过上述,我们已经知道事件分发器可以Call和Bind,那么Bind是如何操作的呢?

(1)进入关卡蓝图,选中需要绑定的蓝图实例,这里选择按钮蓝图

在这里插入图片描述

(2)进入关卡蓝图,右键输入目标事件分发器名称,会有两种方式,一种是永久绑定,一种可以取消的灵活绑定

永久绑定:

在这里插入图片描述
在这里插入图片描述

灵活绑定:

在这里插入图片描述

**通过观察,我们知道:**灵活的绑定,需要新建一个自定义事件并且节点存在执行引脚。而强制绑定,则直接编写逻辑即可!根据需要自行抉择

2.2 Binding an Event Dispatcher function to a custom event

绑定事件分发器到一个自定义事件

在这里插入图片描述

​ 翻译:在这个例子中,相同的按钮蓝图开始和停止一个旋转动画。这个旋转的蓝图在内部绑定了按钮的事件分发器到一个自定义时间上,而不是之前的关卡蓝图!

关键概念:

  • internally Bind

蓝图分析:

在这里插入图片描述

图中显示主要包括2个Actor,按钮蓝图、旋转蓝图,咱们重点观察旋转蓝图是怎么内部绑定事件分发器的:

旋转蓝图

  • 组件结构
    在这里插入图片描述

    根组件带一个StaticMesh组件

  • 构造脚本

  • 事件图表
    在这里插入图片描述

    我们发现,他通过直接设置按钮蓝图的Actor引用变量,调用Bind它的事件分发器Button Toggled到自己的自定义事件Toggle spinning上,完成内部绑定!

2.3 Binding an Event Dispathcer to a custom event on spawn

在spawn的时候绑定一个事件分发器到一个自定义事件

在这里插入图片描述

翻译一下: 这个按钮当被按压的时候会生成一个炸弹蓝图。这个按钮只会被按压一次,直到它接收到炸弹蓝图已经爆炸的事件分发器的通知!

关键概念:

  • SpawnActor

  • Cascade粒子系统组件

蓝图分析:

在这里插入图片描述

本次的蓝图中,默认其实只有按钮蓝图,只有运行游戏后,才会动态spawn炸弹的蓝图,spawn其实就相当于生成的意思!咱们分别看一下:

1、按钮蓝图

它的组件结构和构造脚本跟上述一样,这里不多赘述,贴下图。

(1)组件结构

在这里插入图片描述

这里重点关注一下,左下角变量的Spawn point变量,它是Public的也是显示3D控件属性的一个向量:

在这里插入图片描述

在场景中可以拖拽按钮蓝图实例的3Dwidget,从而调整这个变量的值

在这里插入图片描述

这样在实现一些功能的时候会很方便调节!

(2)构造脚本

在这里插入图片描述

(3)咱们重点关注它的事件图表,如下:

主要分两块,第一块就是触发盒子重叠逻辑,如下:

在这里插入图片描述

第二块就是核心函数Activate逻辑

在这里插入图片描述

重点看SpawnActor这个蓝图节点,在他生成炸弹蓝图实例后,就直接调用Bind对炸弹的Bomb Exploded的事件分发器进行绑定了事件Bomb Exploded_Event,也就是说,它需要在炸弹蓝图爆炸后,通知自己,然后再做某些逻辑!

让我们去看看炸弹蓝图是何时出发的?

2、炸弹蓝图

(1)组件结构

在这里插入图片描述

​ 一个静态网格体作为根组件,下面挂了一个Cascade粒子系统组件作为炸弹的引信的特效!

Cascade粒子系统组件主要是UE4提供的粒子特效系统,后来UE5又引入了Niagara粒子特效系统!

(2)构造脚本

在这里插入图片描述

(3)事件图表

在这里插入图片描述

在Beginplay事件中,就执行了整个逻辑,主要分三块:设置角速度进行旋转、Timeline设置动画、设置爆炸。在设置爆炸的底数第二个节点,我们发现他调用了事件分发器,然后就销毁了自己。所以调用点在这个地方!

3.1 Basic communication using a Blueprint Interface function

使用一个蓝图接口作为基本通信

在这里插入图片描述

**翻译:**在这个案例中,一个按钮蓝图通过一个蓝图接口消息,激活了一组蓝图!尽管每个蓝图不是同一个类,但是实际上,他们实现了相同的蓝图接口,从而使得单一函数激活他们全部成为一种可能,而不需要对每个类进行cast转换!

关键概念:

  • Blueprint Interface

蓝图分析:

在这里插入图片描述

如上图所示,4个蓝图Actor,一个按钮,三个被激活的对象!先看一下效果图:

在这里插入图片描述

靠近按钮时,同时激活了这三个对象,如何做到的呢?就是通过蓝图接口,也叫Blueprint Interface!这里先不解释,最后在总结一下

1、按钮蓝图

  • 组件结构
    在这里插入图片描述

    重点看一下左下角,公开了一个Actor数组成员,它存储需要被激活的Actor。

  • 构造脚本

在这里插入图片描述

不多赘述

  • 事件图表

在这里插入图片描述

这里重点观察一下,咱们直接对这个数组调用了一个蓝图接口的消息,其实本质上是对数组每个成员都调用一下,那么Pushed Button从何而来?双击节点即可!

在这里插入图片描述

我们看到,其实他是一个名为:BPI_Player_Interactions的蓝图接口的资产,那么如何创建蓝图接口呢?

创建蓝图接口,和创建其他资产类似,找到创建一下即可,这里我们找到上述的蓝图接口

在这里插入图片描述

进入之后就是这样,基本上咱们就是在这里定义函数的结构(函数名、参数、返回值)

在这里插入图片描述

接口其实就是定义了函数的规范,并没有实现函数的内容,有需要的类可以根据需要自行实现相应接口,如何实现呢?请看后面的内容!

2、激活对象1的蓝图

在这里插入图片描述

组件结构和构造脚本,咱们不重点关注,重点关注一下,如何实现一个蓝图接口,根据上述的绿色数字和红框,依次点击即可!

从而实现了BPI_Player_Interactions蓝图接口的Pushed Button函数的逻辑!其他两个激活对象也是一样,这里仅截图如下:

激活对象2的蓝图接口实现:

在这里插入图片描述

激活对象3的蓝图接口实现:

在这里插入图片描述

最后咱们总结一下,蓝图接口是规范的一组函数定义的规则,它无视蓝图类的结构,通过抽象出行为,使得每个不同的蓝图得到一种行为调用的统一!

它的基本使用流程:

  • 定义蓝图接口(添加函数、设定参数、设定返回值)
  • 有需要的蓝图实现该接口
  • 合适的地方针对蓝图实例进行调用该接口

由于3.2和3.3的案例也是同样描述蓝图接口的内容,并且案例业务逻辑偏多,咱们学习以核心思路为基准,这里不再重复赘述,有需要的同学可以自学!

概念总结

1、Event Dispatcher

2、Bind Event Dispatcher

3、SpawnActor

4、Cascade粒子系统组件

5、Blueprint Interface

这里贴一个国外虚幻大佬的关于事件分发器和蓝图接口特点的总结截图:

在这里插入图片描述

翻译一下:

事件分发器

  • 异步通信
  • 解耦类
  • 模块化和便捷性

蓝图接口

  • 强制结构
  • 概念分割
  • 减少依赖
  • 减少内存使用

致谢:

今天的学习就到此为止啦,喜欢的小伙伴点点关注+赞哦!有问题及时留言!感谢大家Thanks♪(・ω・)ノ!我是火火,火一般的男人!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Set类

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:Java 目录 👉🏻set1. 接口与实现2. 特性3. 常用方法4. 示例代码5. 遍历6. 线程安全 👉🏻set更多方法1. 其他常…

赛氪作媒体支持单位受邀参加首届科普翻译与跨学科专业学术研讨会

2024年9月22日,正值全国科普日之际,首届科普翻译与跨学科专业学术研讨会在上海健康与营养研究所信息中心励志厅成功举行并圆满结束。此次研讨会汇聚了来自全国各地的近60名专家学者、学界及企业界代表,共同探讨科普翻译与跨学科专业的发展。作…

封装一个vue3的文件上传组件(拖拽或点击选择文件)

1. 效果 选择文件后: 2. 代码 <template><divclass"drop-zone c-normal":class"{borderOutline: outline,}"dragover.preventdrop.prevent"handleDrop"click"chooseFiles"><div v-if"files.length < 1"…

FLStudio21Mac版flstudio v21.2.1.3430简体中文版下载(含Win/Mac)

给大家介绍了许多FL21版本&#xff0c;今天给大家介绍一款FL Studio21Mac版本&#xff0c;如果是Mac电脑的朋友请千万不要错过&#xff0c;当然我也不会忽略掉Win系统的FL&#xff0c;链接我会放在文章&#xff0c;供大家下载与分享&#xff0c;如果有其他问题&#xff0c;欢迎…

使用Vue.extend( ) 模仿 elementui 创建一个类似 message 消息提示框

提示&#xff1a;记录工作中遇到的需求及解决办法 文章目录 前言一、目录结构二、代码1. 创建 m-Toast.vue 文件2. 创建 global.js 文件3. 在 main.js 文件中导入 global.js 文件4. 在 App.vue 文件中使用 全局方法创建的 组件 前言 在此之前一直不明白Vue.extend( )干什么用的…

PCL 用八叉树完成空间变化检测

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1八叉树构建与变化检测 2.1.2检测变化的点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更…

快速排序(C语言实现)

目录 基本概念 Hoare版本 动图演示 思路 代码实现&#xff1a; 性能分析 取Key优化 三数取中法选择基准&#xff08;Median-of-Three Partitioning&#xff09; 实现步骤 代码实现 挖坑法 基本步骤 动图 示例说明 代码实现 前后指针法 动图示范 思路 代码实…

Linux操作系统中docker

1、docker概述 1、什么是docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows&#xff08;对于windows不是太友好&#xff09;操作系统的机器上&#xff0c;也可以…

Amazon EC2:权限设置指南,构建安全的云环境

在数字化转型的浪潮中&#xff0c;企业纷纷将业务迁移到云端&#xff0c;以提高灵活性和效率。Amazon Elastic Compute Cloud&#xff08;EC2&#xff09;作为 AWS 的核心服务之一&#xff0c;为企业提供了一个强大的云计算平台。然而&#xff0c;随着云环境的复杂性增加&#…

DHCP 中继器

在实际应用中可能会遇到一个比较大的物理网络中存在多个ip子网&#xff0c;而每个ip子网的主机都需要DHCP服务器来动态分配ip地址&#xff0c;实现的方法有两种: 第一种是在每一个子网中设置DHCP服务器&#xff0c;将其分别为每个子网分配ip地址&#xff0c;但此方法会增加开销…

【Hadoop】【vim编辑器】【~/.bashrc 文件】如何编辑

1. 进入 vim 编辑器 在终端中输入以下命令&#xff1a; vim ~/.bashrc 2. 进入插入模式 打开文件后&#xff0c;你将处于普通模式。在普通模式下&#xff0c;你不能直接编辑文本。 要进入插入模式&#xff0c;请按下 i 键。这时&#xff0c;你应该会看到屏幕底部出现 -- 插…

优化java中 HashMap 的容量](capacity值)

我们很多人都知道&#xff0c;分配比我们所需更多的内存可能会对应用程序的性能产生负面影响。因此&#xff0c;使用带有容量的构造函数创建列表可能会产生很大的不同。 但是&#xff0c;使用Maps时&#xff0c;这个优化步骤可能不是那么简单。在本文中&#xff0c;我们将学习…

鸿蒙OpenHarmony【小型系统基础内核(互斥锁)】子系统开发

互斥锁 基本概念 互斥锁又称互斥型信号量&#xff0c;用于实现对共享资源的独占式处理。当有任务持有时&#xff0c;这个任务获得该互斥锁的所有权。当该任务释放它时&#xff0c;任务失去该互斥锁的所有权。当一个任务持有互斥锁时&#xff0c;其他任务将不能再持有该互斥锁…

Redis 主从复制的实现过程

Redis 主从复制的实现过程 1. 初始同步请求2. 快照生成与发送3. 从服务器载入数据4. 增量同步5. 持续同步与部分重同步 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Redis 的主从复制是一个高效的数据同步机制&#xff0c;主要步骤为以下…

5分钟内不能重复发送验证码!

文章目录 引言校验5分钟内不能重复发送验证码生成验证内容保存验证码到缓存获取缓存验证内容验证短信验证码是否正确数据模型see also引言 防止被恶意攻击,使用需要限制用户获取验证码的频率,例如5分钟内不能重复发送验证码!获取验证码接口,也必须进行签名校验。 使用Red…

单片机STM32 外部中断线的使用笔记

一、STM32外部中断线问题小结 1.1 不同的端口同一PIN 在STM32中&#xff0c;不同的端口&#xff08;如PA、PB、PC等&#xff09;上的相同PIN号&#xff08;如PA1、PB1、PC1&#xff09;可以共用一个外部中断线&#xff08;EXTI_Line&#xff09;。这意味着&#xff0c;虽然这些…

[系列]相关的知识点关联

系列 独立&不相关不相关&正交协方差&互相关相关系数协方差&相关系数余弦系数&内积余弦系数&相关系数滤波&卷积卷积&互相关互相关&内积互相关&归一化互相关

Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)

本文讲述在虚拟机环境下(模拟服务器)&#xff0c;使用docker方式搭建jenkins&#xff0c;并部署一个简单的Springboot项目。仅记录关键步骤和遇到的坑&#xff0c;后续再进行细节补充。 一、环境准备和基础工具安装 1. 环境 系统环境为本机vmware创建的Ubuntu24.04。 2. yum…

Unity 3D UGUI 系统一口气讲完!(^U^)ノ~YO

UGUI Canvas 画布 Canvas画布是摆放所有 UI 元素的区域&#xff0c;在场景中创建的所有控件都会自动变为 Canvas游戏对象的子对象。 若场景中没有画布&#xff0c;在创建控件时会自动创建画布。 不论是你主动创建还是被动创建&#xff0c;系统都会自动创建一个名为 EventSys…

使用Python解决数据分析中的相关性分析

目录 1.相关系数基础1.1 使用Pandas计算皮尔逊相关系数1.2 计算物品A与其他物品的相关系数1.3 用户间的相关系数1.4 获取相关系数矩阵 2. 相似度计算的Python实现2.1 欧式距离2.2 余弦相似度2.3 皮尔逊相关系数的手动实现 3. 总结 在数据分析中&#xff0c;相关系数是衡量两个变…