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

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♪(・ω・)ノ!我是火火,火一般的男人!

相关文章:

  • ELK-05-skywalking监控SpringCloud服务日志
  • Qt/C++如何选择使用哪一种地图内核/不同地图的优缺点/百度高德腾讯地图/天地图/谷歌地图
  • AI运用在营销领域的经典案例及解析
  • 单片机长短按简单实现
  • Unity 与虚幻引擎对比:两大游戏开发引擎的优劣分析
  • 宝塔搭建nextcould 30docker搭建onlyoffic8.0
  • blue-crab
  • VS Code 配置 Anaconda Python 环境
  • 观察者模式(发布-订阅模式)
  • RTMP、RTSP直播播放器的低延迟设计探讨
  • 搬砖6、Python函数和模块的使用
  • python股票因子,交易所服务器宕机,量化交易程序怎么应对
  • 【分布式微服务云原生】8分钟掌握微服务通信的艺术:Dubbo与OpenFeign全面解析
  • 56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版
  • 内部类基础
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • android 一些 utils
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • css选择器
  • Java精华积累:初学者都应该搞懂的问题
  • JWT究竟是什么呢?
  • Leetcode 27 Remove Element
  • Netty 4.1 源代码学习:线程模型
  • Python socket服务器端、客户端传送信息
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue2.x学习三:事件处理生命周期钩子
  • Web Storage相关
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 测试开发系类之接口自动化测试
  • 成为一名优秀的Developer的书单
  • 机器学习中为什么要做归一化normalization
  • 浅谈web中前端模板引擎的使用
  • 使用parted解决大于2T的磁盘分区
  • 突破自己的技术思维
  • 我建了一个叫Hello World的项目
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​520就是要宠粉,你的心头书我买单
  • ## 基础知识
  • #DBA杂记1
  • #单片机(TB6600驱动42步进电机)
  • (21)起落架/可伸缩相机支架
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (补)B+树一些思想
  • (二十三)Flask之高频面试点
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (蓝桥杯每日一题)love
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)创业家杂志:UCWEB天使第一步