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

文章目录

  • 总览描述
  • 批次阅览
    • 1.1 Basic communication with a target blueprint
    • 1.2 Basic communication via actor casting
    • 1.3 Blueprint communication via actor casting to child Blueprint
    • 1.4 Communicating with all actors of a specific class
  • 概念总结
    • 致谢:

总览描述

在这里插入图片描述

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

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

批次阅览

1.1 Basic communication with a target blueprint

通过一个目标蓝图通信 在这里插入图片描述

此示例具有一个按钮蓝图,它通过自定义事件来触发一个灯蓝图的开关。播放时靠近按钮从而激活它。

关键概念:

  • Custom Event
  • Time Line
  • Material Instance

蓝图分析:

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

按钮蓝图

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

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

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

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

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

​ 主要的逻辑就是重写了触发盒子的重叠事件,设置了材质实例的State参数,大概率是用于设置按钮的不同颜色,有一个TargetLight的Actor对象引用,分别调用开灯和关灯!

那么,这个TargetLight的Actor引用,怎么来的呢?其实就是设为Public变量,然后在关卡给它指定为灯光蓝图,咱们确认一下:

在这里插入图片描述

​ 小眼睛是打开的,没有问题。咱们进入关卡看看

在这里插入图片描述

点击上面右侧的箭头后,确实也定位到了场景的灯光蓝图,如下所示:

在这里插入图片描述

灯光蓝图

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

    我们看到,它就是:静态网格体组件作为根组件,下面挂了一个点光源子组件

  • 构造脚本
    在这里插入图片描述

​ 它基本上就是创建两个材质实例,提升为变量,设置给了灯的静态网格体组件!

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

    基本上就是创建了一个Custom Event自定义事件,有一个输入bool变量。它为true的时候,它通过TimeLine时间轴,是的灯光缓缓的亮灯;它为false的时候,设置灯光颜色为黑色,我们进UpdateLightColor函数,简单瞅一眼!

    在这里插入图片描述

    基本上就是两块逻辑:1、设置材质实例的EmissiveColor参数值 2、设置点光源组件的灯光颜色和强度

    这里简单解释一下:

    1、材质实例就是材质的一个实例。通过在材质中添加参数输入,就可以在它的材质实例进行动态设置修改这个参数,达到动态、灵活的目的!

    2、时间轴节点就是一个特殊的节点,它允许用户在其中创建关键一段时间的参数的关键帧,从而实现平滑的过渡,上述就是通过设置颜色的Alpha通道,从而调整灯光颜色的缓慢过渡!

1.2 Basic communication via actor casting

通过actor的cast转换通信

在这里插入图片描述

​ 翻译:在这个例子中,一个灯泡蓝图通过连接一个电池来触发开与关。灯泡使用一个重叠事件来检测电池蓝图的接触,并相应的设置开/关。

关键概念:

  • Cast
  • Lerp

蓝图分析:

图中显示主要包括3个Actor,按钮蓝图、灯泡蓝图、电池蓝图,咱们分别看一下:

(1)按钮蓝图

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

    跟上节一样,根组件挂两个组件:StaticMeshComponent和Trigger collision

  • 构造脚本
    在这里插入图片描述

    同上节,不解释,创建一个材质实例,并提升为变量

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

    这个也和上节差不多,触发盒子重叠的逻辑有点不一样,它除了设置材质的State参数值,这边它设置了一个电池蓝图引用的Move Up/Down函数,控制电池的上下!进入关卡蓝图确认一下:

    在这里插入图片描述

    确实是这个样子的,直接引用了电池的蓝图!

(2)电池蓝图

在这里插入图片描述

  • 组件结构
    根组件挂了一个电池的静态网格体组件,然后它又带了一个立方体的触发盒子

  • 构造脚本

在这里插入图片描述

设置了静态网格体组件的模型

  • 事件图表

    在这里插入图片描述

    它自定义了一个Move up/down的事件,它通过时间轴和插值结点设置了静态网格体组件Battery的位置和旋转,不难猜测,其实就是控制电池的上下移动!

    Lerp(Vector) 结点是向量的插值结点,通过定义Alpha(一般是0-1),从而获取一个向量A-向量B之间的一个过渡值。

    Alpha为0时,结果为A;Alpha为1时,结果为B;Alpha:0-1时,结果就是A*(1-Aplha)+ B * Aplha。

(3)灯泡蓝图
在这里插入图片描述

  • 组件结构

    根组件为静态网格体组件,它有两个子组件:触发盒子组件、点光源组件

  • 构造脚本

    在这里插入图片描述

    也是类似,创建两个材质实例并提升变量

  • 事件图表

    在这里插入图片描述

    主要有好几个逻辑,一个一个看:

    首先是初始化:

    在这里插入图片描述

    主要逻辑就是:通过获取触发盒子的所有重叠Actor,依次遍历,通过Cast强制转换结点判断,是不是电池,如果是电池蓝图和自己重叠了,就获取电池的电量值加到本身自己的电量供给的变量,然后根据电量供给是否>=0,决定灯泡触发开关。

    然后是触发盒子重叠事件:
    在这里插入图片描述

    主要逻辑就是:通过Cast强制转换结点判断,是不是电池,如果是电池蓝图和自己重叠了,就获取电池的电量值加到本身自己的电量供给的变量,然后根据电量供给是否>=0,决定灯泡触发开关。

    最后是Toggle On/Off 的自定义事件:
    在这里插入图片描述

    逻辑和之前的前面类似,主要就是通过变量Electicity Suppled的变量值进行调整灯光颜色的Alpha值,从而更改灯光的颜色!

1.3 Blueprint communication via actor casting to child Blueprint

通过actor的cast转换为子蓝图通信

在这里插入图片描述

翻译一下: 这些灯泡蓝图通过连接不同类型的电池进行开关。每一种电池都是从同一个父类蓝图派生,但是有不同的电量值来影响灯泡的亮度。

关键概念:

  • Child Blueprint Class
  • derived

蓝图分析:

本次的图中,我们看到3个按钮蓝图,三个电池蓝图,三个灯泡。其中3个按钮、3个灯泡都同上节一样的,咱们不多赘述!重点关注电池蓝图同上节的区别。

关卡中选中任意电池,按Ctrl + B跳转到内容浏览器,发现了三个电池的蓝图,其中两个后缀为Child,就是派生父类的子蓝图类!

咱们确认一下:

1、不带Child后缀

在这里插入图片描述

2、带Child后缀
在这里插入图片描述

我们发现确实父类变了,那么正常情况下,如何派生父类呢?其实很简单,右键父类蓝图,然后有一个选项创建子蓝图类,如下图:

在这里插入图片描述

我们进入父类蓝图观察:

在这里插入图片描述

原来,他通过暴露电池的静态网格体模型参数,以及电量供给参数,从而实现子蓝图类,可以配置自己专属的模型样式和电量,从而实现不同灯泡的发光亮度!那么为什么呢?其实本质上就是子蓝图类Cast为父蓝图类,是可以转换成功的!

多态就是面向对象编程的三大概念:封装、继承、多态。

从蓝图派生子蓝图类,本质上就是继承的过程,它会拥有父类蓝图的所有属性和方法。

这里的父类和子类,有点类似于动物和狗的关系,狗从动物派生而来,狗必定是一种动物!

所以派生类能够Cast父类成功!希望大家多多理解着里面的概念!

1.4 Communicating with all actors of a specific class

和所有一种明确类型的actor通信

在这里插入图片描述

**翻译:**一个按钮控制一类所有灯泡的开和关。这个按钮蓝图找到所有灯泡类的实例,然后对其中每一个调用Togglelight事件!

关键概念:

  • Get All Actors Of Class
  • For Each Loop
  • Array

蓝图分析:

在这里插入图片描述

就按钮蓝图和灯泡蓝图嘛,灯泡咱们不看了,重点关注按钮蓝图获取所有同一类Actor的实例。

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

    不多赘述

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

    我们发现通过Get All Of Class这个蓝图结点,设置咱们关注的类,就可以获得一个Actor的Array,也就是数组,表示很多个Actor,通过遍历这个数组,将他们Cast强转,进行Toggle Light事件调用完成批量开关灯。

概念总结

1、Custom Event

2、Time Line

3、Material Instance

4、Cast

5、Lerp

6、Child Blueprint

7、Get All Actors Of Class

8、ForEachLoop

9、Array

因为篇幅原因,Blueprint_Communication这个关卡还有一半就放下一篇啦!

致谢:

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

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

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

相关文章

vite分目录打包以及去掉默认的.gz 文件

1.vite打包情况介绍: 1.1vite在不进行任何配置的情况下,会将除开public的所有引用到资源打包编译添加哈希值至assets文件夹中(非引用文件以及行内样式图片未被打包编译资源会被treeSharp直接忽略不打包),     1.2w…

SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(中)

修改Spring Security 登录验证模式 传统的验证登录模式 公开页面:输入url就可以直接访问授权页面:登录之后才可以访问 Jwt验证模式 容易实现跨域不需要在服务器端存储 对比于传统模式将所有的sessionId换成jwt token access token refresh token 过…

neo4j小白入门

1.建立几个学校的节点 1.1创建一个节点的Cypher命令 create (Variable:Lable {Key1:Value,Key2,Value2}) return Variable 1.2创建一个学校的节点 create (n:School{name:清华大学,code: 10003,establishmentDate:date ("1911-04-29")})return n 1.3一次创建几个…

在Markdown中实现内部查询

markdown实现内部查询 在想要跳转到的位置添加 <a idxxx></a> 标签&#xff0c;如下图&#xff1a; 然后按如下格式添加目录 [跳转文字](#id)&#xff1a; 如上操作即可实现markdown内部查询。 具体实现效果如下&#xff1a;

通过service访问Pod

假设Pod中的容器可能因为各种原因发生故障而死掉&#xff0c;Deployment等controller会通过动态创建和销毁Pod来保证应用整体的健壮性&#xff0c;换句话说&#xff0c;Pod是脆弱的&#xff0c;但应用是健壮的 每个Pod都有自己的Ip&#xff0c;当controller用新的Pod替代发生故…

seL4 Mapping(三)

官网链接: Mapping Mapping 这节课程主要是介绍seL4的虚存管理。 虚存 Virtual memory 除了用于操作硬件分页结构的内核原语之外&#xff0c;seL4不提供虚拟内存管理。用户必须为创建中间级分页结构&#xff0c;映射页面以及取消映射页面提供服务。 用户可以随意的定义他们…

6种常见位运算符+异或运算符的使用(加密、解密)

一、位运算符 位运算符进行的是整数与整数之间的运算 1、右移运算符&#xff1a;>> &#xff08;1&#xff09;相当于对整数除以2 &#xff08;2&#xff09;举例&#xff1a; int num 2; System.out.println(num >> 1); 2、左移运算符&#xff1a;<< …

opencv-python学习笔记10-图像形态学处理

目录 一、基本概念&#xff1a; &#xff08;1&#xff09;结构元素&#xff08;Structuring Element&#xff09;&#xff1a; &#xff08;2&#xff09;膨胀&#xff08;Dilation&#xff09;&#xff1a; &#xff08;3&#xff09;腐蚀&#xff08;Erosion&#xff0…

巧用解压软件:高效处理云盘文件

百度网盘支持多种文件格式&#xff0c;包括文本文件格式如.txt、.doc、.docx 等&#xff1b;图片文件格式如.jpg、.png 等&#xff1b;音频文件格式如.mp3、.wav 等&#xff1b;视频文件格式如.avi、.mp4 等&#xff1b;压缩文件格式如.zip、.rar、.7z 等&#xff1b;可执行文件…

进度条QProgressBar

进度条控价&#xff0c;用来只是任务的完成情况 值 包括当前值、最大值、最小值 // 获取和设置当前值 int value() const; void setValue(int);// 获取和设置最大值 int maximum() const; void setMaximum(int);// 获取和设置最小值 int minimum() const; void setMinimum(i…

http增删改查四种请求方式操纵数据库

注意&#xff1a;在manage.py项目入口文件中的路由配置里&#xff0c;返回响应的 return语句后面的代码不会执行&#xff0c;所以路由配置中每个模块代码要想都执行&#xff0c;不能出现return 激活虚拟环境&#xff1a;venv(我的虚拟环境名称&#xff09;\Scripts\activate …

【论文翻译】AFLGuard: Byzantine-robust Asynchronous Federated Learning

提示&#xff1a;该论文标题为AFLGuard: Byzantine-robust Asynchronous Federated Learning&#xff0c;我将对其进行部分翻译&#xff0c;便于后续阅读。 文章目录 AFLGuard&#xff1a;拜占庭鲁棒的异步联邦学习一、摘要二、引言三、知识前提拜占庭鲁棒联邦学习 四、问题表述…

排序(插入,希尔,堆排)

常见的排序算法&#xff1a; 插入排序&#xff1a; 直接插入排序&#xff1a;是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个…

mysql如何替换数据库所有表中某些字段含有的特定值

目录 背景查询所有表名查询表的所有字段过虑特征字段替换字段中含有的特定值 背景 公司的测试域名更换了&#xff0c;导致存放在数据库中的域名也要跟着替换&#xff0c;当然把域名存放在数据库表中是不科学的&#xff0c;不建议这样做&#xff0c;但公司的同事就这样做了&…

AWS开启MFA,提高安全性

引言 多因素认证&#xff08;Multi-Factor Authentication, MFA&#xff09;是一种重要的安全措施&#xff0c;可以显著提高您的AWS账号的安全性。通过启用MFA&#xff0c;即使密码被盗&#xff0c;攻击者也难以访问您的账户。本文中九河云将详细介绍如何在AWS Management Con…

element-plus表格操作

elememt-plus安装见上文 表格的特性 element-plus中的表格和原版表格最大的不同是写法不同&#xff0c;原版表格以行的方式写&#xff0c;element-plus以列的方式写。 element-plus的表格可以更方便的展示数据&#xff0c;只需要考虑数据的格式即可。 表格标签 表格标签有两种…

LeetCode 257. 二叉树的所有路径,dfs

LeetCode 257. 二叉树的所有路径 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 目录 LeetCode 257. 二叉树的所有路径算法选择数据结构解题步骤算法流程算法代码算法分析易错点和注意事项相似题目 算法选择 深度优…

Web端云剪辑解决方案,提供多轨视频、音频、特效、字幕轨道可视化编辑

传统视频剪辑软件的繁琐安装、高昂硬件要求以及跨平台协作的局限性&#xff0c;让无数创意者望而却步。美摄科技作为云端视频编辑技术的领航者&#xff0c;携其革命性的Web端云剪辑解决方案&#xff0c;正重新定义视频创作的边界&#xff0c;让专业级视频剪辑触手可及&#xff…

k8s StorageClass 存储类

文章目录 一、概述1、StorageClass 对象定义2、StorageClass YAML 示例 二、StorageClass 字段1、provisioner&#xff08;存储制备器&#xff09;1.1、内置制备器1.2、第三方制备器 2、reclaimPolicy&#xff08;回收策略&#xff09;3、allowVolumeExpansion&#xff08;允许…

多线程:死锁

目录 死锁的条件 死锁的示例 死锁的预防与解决 死锁的检测 总结 死锁&#xff08;Deadlock&#xff09;是多线程或多进程环境中一种特定的状态&#xff0c;指的是两个或多个线程或进程在执行过程中&#xff0c;由于争夺资源而造成的一种相互等待的状态&#xff0c;导致它们…