UE5笔记【十二】蓝图函数BluePrint Function

news2024/12/26 3:28:09

上一篇讲了蓝图变量,这一篇说蓝图函数。BluePrint Function

函数,一般是为了将一段功能的代码提取出来,然后方便我们反复使用。重复的代码可以提取一个函数。类似的,相同的蓝图,我们也可以提取出一个蓝图函数来。

如果我们修改蓝图函数中的某一部分,那么所有调用这个函数地方,也相应的跟着改变。


假设场景需求:有一个像超级玛丽中Smasher的Cube,当玩家碰到他时gameOver。

首先我们在内容抽屉中,新建一个BluePrints的文件夹,便于整齐的存储文件。

 点击进入文件夹。然后右键空白新建【蓝图类】,然后选择【Actor】,并命名为BP_Smasher。

 然后双击打开。然后添加一个Cube。

然后添加一个【框碰撞】

 调整大小,使碰撞检测框大于cube。当玩家碰到这个box时,玩家GameOver。

然后我们点击编译,然后保存。进入到游戏界面,然后将这个cube放置在场景中。从内容抽屉中,直接拖拽。 

我们需要将碰撞框box和Cube一个整体,这样在移动cube时,box可以跟着一起移动。所以我们让其包含就可以。我们将box拖拽,直接放在cube下面。然后编译,保存。

接下来,就要进入到事件图表graph中,编辑事件逻辑了。

首先我们需要cube的位置。将其拖拽到事件图表中。

 然后获取相关位置:

完事,需要一个【movecomponent to】节点。

 然后将事件开始运行时与move componet to组件连接。我们希望cube上下移动,所以,将位置分割出z轴来。右键【分割结构体引脚】。

 移动组件的xyz也需要分割。

 X轴和Y轴保持不变,直接连接,对于z轴。我们需要增加400。

因为移动物体是cube,所以我们需要在移动模块中,将cube与component连接。

然后编译,保存,进入游戏,看看游戏启动时,他是否移动。

速度太快,我们需要修改component模块中的overtime项,然后高度有点高。进行调整。

然后重新编译,保存。重新进入游戏,发现,盒体上升速度慢了。我们需要其静止2秒钟,然后坠落,然后砸向地面。如果下面有玩家,则over。

设置Duration为2.0。 

 有个小技巧:当盒体降落时,我们还是需要,cube这个节点,然后目标位置。然后add节点。这三个节点,我们可以框选,然后Ctrl+C,然后Ctrl+V,复制到后面直接用。

Z轴由350,变为负的-350。相当于,盒体降落,降落速度。1秒。然后编译,保存。进游戏查看。



上面实现了一个cube升降的动作蓝图。现在我们需要这个cube不断重复这个动作。



函数的作用,首先需要取代一些重复的代码。在蓝图中,我们计算位置变换的部分,这部分重复,我们可以用一个函数来代替:

我们新建一个函数:然后将其命名为Rise。此时界面将进入Rise函数编辑界面。

 对于一个这个函数,我们需要分别【添加】一个输入和一个输出,输入类型为StaticMeshComponent。我们将其命名为SM。输出设置为Vector类型,然后命名为:Location。然后我们将上面重复的位置变化的蓝图Ctrl+X剪切,Ctrl+V粘贴到函数中,然后将输出的Location向量分解为X、Y、Z。与重复的部分连接。将函数的输入部分SM连接到函数重复部分。注意函数细节中:在输入部分:支持:通过引用传递。也就是编程中的值传递和引用传递中的引用传递


回到事件图表中,

然后将Rise函数拖出: 

插一句:现在感觉UE5中这种拖动:在编程中,相当于函数的调用,或者说对于类型的实例化

将cube作为参数输入到函数中,也就是连线。因为函数输出为向量,所以蓝图中的MoveToComponent组件中的目标相关位置也要重新组合为向量。然后与函数的输出连接。

 将Rise函数的输出与MoveToComponet组件连接,然后我们需要一个Fall函数。简单做法:直接复制一个Rise函数,然后将其中个参数改为负值。-350。

 回到事件图表中,然后将函数调用。完成替换。点击编译。保存。

编译报错:说我们的函数执行引脚未连接:

这个执行,可以理解为,你要调用这个函数,但是你要把函数放在哪个上下文中调用。这个需要确认,因为执行是一个流图。

 我们要把函数的执行点与这个事件开始执行连接起来。使得事件开始执行后,转入函数中,然后将函数后执行接入到MoveToComponent组件上,Fall函数处理方式相同。

然后重新编译,保存,进入游戏中,测试是否实现对cube的升降动作实现。


接下来是循环:

将与事件开始执行的组件连线断开,然后新建一个自定义事件节点:add custom

我们将这个事件命名为Start,将Start执行点位与函数执行点位连接。此时编译,保存,回到游戏中,cube不会有任何变化,因为,虽然我们建立了一个事件,但是并没有调用它。这个事件类似于一个函数。

此时,我们在蓝图的【事件开始运行】结点出引出一条线,然后开始搜索这个Start。 

此时编译保存,进入游戏界面,cube正常升降。


如何循环呢?

单个流程进行完,之后,我们在后面再补上一个Start。

此时编译,保存,进入游戏界面测试。实现整个动作循环执行。

如果我们希望每次循环之前,有点停顿。我们可以加入delay。

 编译,保存,查看。



基于上面的蓝图,我们再建一个实体。 

 插一句:现在感觉这个拖动,也是实例化。那些蓝图类的操作,是在新建一个类。

 我们观察这个新建实例的效果。

我们可以发现:两个Cube同时升降。现在我们想让他们错落有序。

我们回到这个蓝图类的事件图表中。然后新建一个变量。命名:StartDelay。类型为浮点类型。

 然后,拖动到图上,选择【获取StartDelay】,然后将其连接到Delay模块上。在右侧细节栏中,设置默认值为1.0。然后勾选【可编辑实例】。然后编译。保存。进入到游戏界面中。

 在游戏界面中,将两个实例的StartDelay分别设置为0.7和1.2。然后启动游戏查看。

两个cube实例,错落升降。 

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

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

相关文章

青龙面板 香蕉

香蕉角本教程 介绍 香蕉视频 app —【多用户版】 一个账户每天稳定1元,可以自己提现,也可以兑换会员,脚本不停会员也不停!可注册多个账户!(多账户福利自行看文章底部!) 拉取文件 …

【微服务】springboot 整合javassist详解

一、前言 Javassist 是一个开源,用于分析、编辑和创建Java字节码的类库,由东京工业大学数学和计算机科学系的 Shigeru Chiba (千叶滋)所创建。目前已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操…

linux redhat 8 创建逻辑卷

LVM与直接使用物理存储相比,有以下优点: 1. 灵活的容量. 当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷. 2. 方便的设备命名 逻辑卷可以按你觉得方便的方式来起任何名称. 3.磁盘条块化. 你可以生成一个逻辑盘,它的数据可以被…

记录一次Mac本地启动nacos遇到的问题

nacos 官网:https://nacos.io/zh-cn/docs/quick-start.html 我这里下载的是2.0.3稳定的版本 本地启动:sh startup.sh -m standalone 问题1:Caused by: java.lang.IllegalStateException: No DataSource set 这里是数据源连接有问题&#xff…

Linux网络原理及编程(6)——第十六节 TCP可靠性保证的原理

目录 1、确认应答机制 2、超时重传机制 3、滑动窗口 4、流量控制 5、拥塞控制 6、延迟应答 (各位好,博主新建了个公众号《自学编程村》,拉到底部即可看到,有情趣可以关注看看哈哈,关注后还可以加博主wx呦~~~&am…

Apache Flink 水印的工作机制详解与源码阅读

一、时间长河谁能解 在人类生存的地球上,存在着一种很神秘的东西:时间,它看不见摸不着,但速度恒定,单调递增且永无止境的往前推进,人类的历史被淹没在茫茫的时间长河中。同时在地球附近,一个星…

【自动化测试】如何平衡手工和自动化测试

作为一名测试人员,如何平衡手工和自动化测试,是一道绕不过去的课题。不可否认,自动化测试具有提高效率,加快回归速度并因此有助于及时交付项目的好处。但是,在考虑自动化之前,我们应该评估一些要点&#xf…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java毕业生就业管理系统243xa

首先选择计算机题目的时候先看定什么主题,一般的话都选择当年最热门的话题进行组题,就比如说,今年的热门话题有奥运会,全运会,残运会,或者疫情相关的,这些都是热门话题,所以你就可以…

vscode 关闭/忽略/ignore 单个/指定 git 仓库/repository 提示

文章目录1. 问题2. 解决方法2.1 只追踪 打开文件 所在的仓库2.2 忽略指定的仓库3. 参考1. 问题 vscode 当打开的项目中有多个 git 仓库时,默认会显示所有仓库的 status。 有些已经不再使用的仓库可能有多处更改,但我们并不想去处理它。 如果直接关闭 vs…

gcc 4.8.5 的string问题

gcc 4.8.5及一下版本 的string 因为内部内存管理采用了COW的方式,导致了string在多线程的状态下容易崩溃。崩的很没有规律,表现就是string在赋值的时候就莫名其妙的崩了,查看堆栈,你也看不出啥。崩溃的很随机。 为了避免崩溃&…

文本纠错--文本分割N-gram--Macbert模型的调用以及对返回结果的处理

文本根据词典进行纠错 输入一段可能带有错误信息的文字, 通过词典来检测其中可能错误的词。 例如:有句子如下:中央人民政府驻澳门特别行政区联络办公室1日在机关大楼设灵堂    有词典如下:中国人民,中央人民&#x…

漏斗分析 - AARRR模型案例分析

漏斗分析是一套流程式的数据分析方法,能够科学地反映各阶段用户转化情况。漏斗分析模型已经广泛应用于用户行为分析类产品,且功能十分强大:它可以评估总体或各个环节的转化情况、促销活动效果;也可以与其他数据分析模型结合进行深…

【三维目标检测】SSN(二)

SSN数据和源码配置调试过程请参考上一篇博文:【三维目标检测】SSN(一)_Coding的叶子的博客-CSDN博客。本文主要详细介绍SSN网络结构及其运行中间状态。 1 模型总体过程 SSN主要结构如下图所示,其核心在于提出了shape-aware heads…

认识分布式锁、使用分布式锁 Redission、实现秒杀案例

分布式锁 基本原理 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行&…

[附源码]计算机毕业设计基于Vue的社区拼购商城Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

node.js-fs模块学习

目录 1.使用fs.readFile方法读取文件 2.使用fs.writeFile方法写入文件 3.fs小案例-整理成绩并写入到新文件中 4.fs模块-路径动态拼接的问题 1.使用fs.readFile方法读取文件 //导入fs模块 const fs require(fs)//调用fs读取文件 //参数1:读取文件的存放路径 //…

spring——Spring Bean属性注入——短命名空间注入——p 命名空间注入(setter注入)...

短命名空间注入 我们在通过构造函数或 setter 方法进行属性注入时&#xff0c;通常是在 <bean> 元素中嵌套 <property> 和 <constructor-arg> 元素来实现的。这种方式虽然结构清晰&#xff0c;但书写较繁琐。Spring 框架提供了 2 种短命名空间&#xff0c;可…

java基于Springboot的论坛管理系统-计算机毕业设计

项目介绍 在社会快速发展的影响下&#xff0c;论坛管理系统继续发展&#xff0c;使论坛管理系统的管理和运营比过去十年更加信息化。依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上论坛管理系统是一项十分重要并且有价值的事情。对于传统的论坛管理系统控制模型来…

【大数据入门核心技术-Azkaban】(一)Azkaban介绍

目录 一、Azkaban 是什么 二、Azkaban 特点 三、Azkaban 与 Oozie 对比 一、Azkaban 是什么 Azkaban 是由 Linkedin 公司推出的一个批量工作流任务调度器&#xff0c;Azkaban 使用 job 文件建立任务之间的依赖关系&#xff0c;并提供 Web 界面供用户管理和调度工作流 官方网…

最新、最全面的Java面试题及答案(212道)

文章目录一. Java 基础1. JDK 和 JRE 有什么区别&#xff1f;2. 和 equals 的区别是什么&#xff1f;3. 两个对象的 hashCode() 相同&#xff0c;则equals() 也一定为true&#xff0c;对吗&#xff1f;4. final 在 Java 中有什么作用&#xff1f;5. Java 中的 Math. round(-1.…