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

文章目录

  • 总览描述
  • 批次阅览
    • 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.rhkb.cn/news/431623.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery——函数的使用

1、作为一般函数调用:$ ( param ) ① 参数为函数:当 DOM 加载完成后,执行此回调函数 ② 参数为选择器字符串:查找所有匹配的标签,并将它们封装成 jQuery 对象 ③ 参数为 DOM 对象:将 DOM 对象封装成 jQu…

828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter

在追求创新与效率并重的今天,我们公司迎难而上,决定自主搭建一款短视频生成AI工具——MoneyPrinter,旨在为市场带来前所未有的创意风暴。面对服务器选择的难题,我们经过深思熟虑与多方比较,最终将信任票投给了华为云Fl…

SW - 将装配体保存成零件给其他装配体用

文章目录 SW - 将装配体保存成零件给其他装配体用概述笔记将子装配图另存为零件给其他装配图用打开另存后的零件图END SW - 将装配体保存成零件给其他装配体用 概述 想做一个散料飞达物料的布局图,初步想法是整一个装配体,然后出工程图标注上散料飞达料…

频谱分析仪:射频领域的多面手

频谱分析仪,作为射频领域的中心工具,其重要性不言而喻。它主要分为实时分析式和扫频式两大类,各自以其独特的方式在信号处理领域发挥着关键作用。实时分析式频谱仪能够即时捕获并分析非重复性、持续时间极短的信号,为科研人员提供…

Mybatis自定义TypeHandler,直接存储枚举类对象

在这篇文章中,我们已经知道如何使用枚举类直接接受前端的数字类型参数,省去了麻烦的转换。如果数据库需要保存枚举类的code,一般做法也是代码中手动转换,那么能不能通过某种机制,省去转换,达到代码中直接保…

C#知识|认识简单工厂的设计模式

哈喽,你好啊,我是雷工! 最近了解到一个概念信创,即信息技术应用创新产业,是国产化的一个阶段,为了实现信息技术自主可控,规避被外部卡脖子的风险; 随着信创产业的发展,逐…

[附源码]宠物领养管理系统+SpringBoot

今天带来一款优秀的项目:宠物领养管理系统源码 。 系统采用的流行的前后端分离结构,内含功能包括"管理端",“用户领养端”,“宠物管理”,“权限登录”等功能。 如果您有任何问题,也请联系小编&a…

高密原型验证系统解决方案(上篇)

0 引言 随着当今 SoC 设计规模的快速膨胀,仅仅靠几 颗当代最先进的 FPGA 已经无法满足原型验证的需求。简单的增加系统的容量,会遇到系统时钟复位同 步,设计分割以及高速接口和先进 Memory控制器 IP 验证等多重困难。此时,一个商用…

解决docker目录内存不足扩容处理

当我们使用docker时,经常会创建新镜像和新容器,在新容器中又会安装各种包,这些东西不是虚拟的,而是实实在在存于我们的磁盘中,默认在/var/lib/docker中,这个目录是属于系统盘的,而系统盘的空间往…

Spring Boot房屋租赁平台:现代化解决方案

1 绪论 1.1 研究背景 中国的科技的不断进步,计算机发展也慢慢的越来越成熟,人们对计算机也是越来越更加的依赖,科研、教育慢慢用于计算机进行管理。从第一台计算机的产生,到现在计算机已经发展到我们无法想象。给我们的生活改变很…

OpenHarmony标准系统mipi摄像头适配

OpenHarmony标准系统mipi摄像头适配 本文档以rk3568为例,讲述如何在OpenHarmony 标准系统rk设备上适配mipi摄像头。 开发环境 OpenHarmony标准系统4.1rrk3568设备摄像头ov5648,ov8858 文档约定:4.1r_3568为OpenHarmony标准系统源码根目录 1.适配准备:得…

DAMODEL丹摩智算平台实践CogVideoX

文章目录 前言 一、平台账号注册并登录 二、部署CogVideoX (一)简介 (二)部署 1. 创建实例 2. 配置环境和依赖 3.预制模型与配置文件 三、开始运行 总结 前言 该文章主要记录DAMODEL丹摩智算平台实践过程与心得体会&…

virtualbox中的网络模式,网络设置,固定IP

virtualbox关于网络设置的文档:https://www.virtualbox.org/manual/topics/networkingdetails.html#networkingdetails DHCP Dynamic Host Configuration Protocol:动态主机配置协议,是专门用来给网络中的节点分发IP地址,确保每…

如何开发数字药店与医保购药APP:技术架构与实现细节

本文将深入探讨数字药店与医保购药APP的技术架构及其实现细节,帮助开发者更好地理解该领域的技术需求。 一、技术架构概述 数字药店与医保购药APP的技术架构通常可以分为以下几个层次: 1.前端层: -用户界面 -用户体验 2.中间层&#xff…

尚品汇-自动化部署-Jenkins的安装与环境配置(五十六)

目录: 自动化持续集成 (1)环境准备 (2)初始化 Jenkins 插件和管理员用户 (3)工作流程 (4)配置 Jenkins 构建工具 自动化持续集成 互联网软件的开发和发布&#xf…

善康医药上市梦终止:持续亏损1.77亿现金流为负,预估值超50亿存疑

《港湾商业观察》施子夫 6月29日,深圳善康医药科技股份有限公司(以下简称,善康医药)披露第一轮审核问询函的回复意见。 9月24日,因善康医药及其保荐人国金证券股份有限公司撤回发行上市申请,上交所终止科…

微信小程序开发第八课

一 公告 1.1 微信小程序端 #js###const api require("../../config/settings.js") Page({data: {noticeList: [{title: 公告标题1,create_time: 2024-04-25,content: 公告内容描述1,公告内容描述1,公告内容描述1。, // 可以根据实际情况添加…

Spring 核心

Spring 核心 这篇文章,我们换个思路来学习,来践行一下以始为终,以面试题为引来重温一下Spring,毕竟孔子曾说,“温故而知新,可以为师矣。” ,可以通过这个链接看看有哪些常见的面试题 Spring 面…

架构师案例思路:架构设计(附真题)

目录 案例题目规则 架构设计案例分析 知识总纲(理解并背诵) 架构风格(理解并背诵) 质量属性(理解并背诵) 性能 可靠性 可用性 可修改性 功能性 可变性 互操作性 架构评估(理解并背诵) 具体架构风格(理解) 层次架构 两层C/S架构 三层C/S架构 B/S架构…

使用 Nuxt Kit 的构建器 API 来扩展配置

title: 使用 Nuxt Kit 的构建器 API 来扩展配置 date: 2024/9/24 updated: 2024/9/24 author: cmdragon excerpt: 摘要:本文详细介绍了如何使用 Nuxt Kit 的构建器 API 来扩展和定制 Nuxt 3 项目的 webpack 和 Vite 构建配置,包括扩展Webpack和Vite配置、添加自定义插件、…