UE4-(蓝图)第一百一十四课 宏

2023-10-11 23:30
文章标签 ue4 蓝图 四课 一百一十

本文主要是介绍UE4-(蓝图)第一百一十四课 宏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

宏特别合适用来制作控制流,因为宏有多个入口及多个出口,系统提供的宏有FlipFlop、DoN等

可以简单认为,蓝图的编译也是分为上图中的四个步骤,蓝图中的宏是在预处理阶段进行处理的

宏与函数区别:

一、“展开”就是直接将宏代码直接复制粘贴替换到所有使用当前宏的地方。

二、有无实体:调用函数,在运行时会跳转到函数实体中执行逻辑。宏在预处理之后就会消失,没有实体。

三、函数需要在一帧之内执行完成,所以不能使用Delay。

四、在蓝图类中创建的宏,不能被子类继承,子类也无法使用父类的宏。  而函数可以被子类继承。

五、宏的参数可以定义为Exec 类型。函数不可以。

六、宏可以定义多个入口及多个出口,函数只有一个进口和一个出口

七、可以创建自定义宏库,需要设置选择父类,只有父类类型及所有子类才可以使用该自定义的宏库。比如:以Actor为父类创建的宏库,所有的Actor及以Actor作为父类的子类都可以使用该宏库。Object类型是所有类型的父类,如果创建一个类型为Object类型的宏库,可以被所有蓝图使用。制作函数库,没有任何限制,都可以被蓝图使用。

示例:制作宏库

一、制作以Object为基类的宏库,创建完成后命名为MyStandardLibrary

二、创建宏并实现逻辑AB交替出现(FlipFlop节点功能)

1.双击打开宏库,可以点击+号添加宏,默认会创建一个宏,命名为MyFlipFlop

2.宏中的特征:在宏中定义局部变量,在宏蓝图界面空白处右键搜索Local,可以定义想要类型的局部变量,这种定义局部变量的方式只有在宏中才有。(在函数中,需要在局部变量列表添加变量,宏中需要使用节点创建)

创建一个Bool类型的 局部变量

3.设置逻辑宏输出参数,为Exec类型的两个值分别为A,B,选中宏,点击+号增加变量,并设置类型及名称。设置输入参数为Exec类型

4.对宏中的局部变量赋值节点  Assign   执行一次逻辑就需要将局部变量取反

5.完成逻辑

6.为了获取当前bool值所以要添加 bool 类型的输出参数,用于外界获取到当前bool 值

 

7.创建一个Actor为基类的蓝图类调用宏,在蓝图类右键搜索MyFlipFlop

注意:因为是以Object类型为基类,Actor类型是Object的子类,所以也可以调用宏,但是actor本身没有接受玩家输入操作,所以要开启接受玩家输入操作,才能够在按键的时候响应。使用 Enable Input 节点。

运行:

 

 

这篇关于UE4-(蓝图)第一百一十四课 宏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/191623

相关文章

AI产品经理成长蓝图:从入门到精通的学习路径指南

AI产品经理区别于普通产品经理的地方,不止在懂得AI算法,更重要的是具有AI思维。 人工智能产品设计要以操作极度简单为标准,但是前端的简单代表后端的复杂,系统越复杂,才能越智能。 同样,人工智能的发展依赖于产业生态的共同推进,上游芯片提供算力保障,中游人工智能厂商着力研发算法模型,下游应用领域提供落地场景。 一、人工智能产业链结构 人工智能产业链结构上可分为基础层(计算基础设施)、技术层(

【UE4源代码观察】观察Core模块

话题 Core模块是整个引擎中最核心的模块,在之前的博客【UE4源代码观察】可视化所有模块的依赖情况中有统计,它被983个模块引用,恐怕除了第三方的模块外基本所有模块都有引用。我想首先观察其中的内容,然后再做测试:将Core模块拷贝到之前【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程建立的空白工程中,看能否将它成功编译,理论上讲,“核心”不应再依赖太多其他的东西,所以我应该不会再需

【UE4源代码观察】在空白工程中测试跨模块调用函数

目的 在之前的博客【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程中,成功让UBT工作起来了。现在我想要测试编译出的多个模块之间是否能互相调用,我记录下测试的过程。最终工程见 工程GIT链接。 实践 第一部分 首先仿照TestA模块建立TestB模块。 在TestB.h文件中声明了一个函数 int TestBFunc(int x, int y); 并在TestB.cpp中

【UE4源代码观察】观察FEngineLoop中各函数的调用顺序

当启动编辑器时,Launch模块是启动模块,在Windows平台中 LaunchWindows.cpp 的 WinMain函数是入口,而 FEngineLoop 管理了程序的初始化与主循环。他的成员函数如下: public:/*** Pre-Initialize the main loop, and generates the commandline from standard ArgC/Arg

【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程

我想观察UE4是怎么编译的,于是查阅官方文档,了解到UE4有一套自己的编译工具:UnrealBuildTool,简称UBT。关于UBT的官方文档参阅:虚幻编译工具。我想尝试自己手动建立一个使用UBT进行编译的空白工程。不过首先,先了解下UBT的编译流程中一些文件所扮演的角色 UBT的编译流程中一些文件所扮演的角色 模块 每个模块都由一个 .build.cs 文件声明,它存储在 Source

【UE4源代码观察】可视化所有模块的依赖情况

思路 UE4引擎的模块非常多,我想要观察他们的依赖情况。于是我写了程序读取所有模块的.Build.cs文件,记录每个模块依赖的模块(当前是看PublicDependencyModuleNames和PrivateDependencyModuleNames。但后来经评论提醒我发现AddEngineThirdPartyPrivateStaticDependencies也应该视作是“依赖”但没统计,后续

简单梳理UE4的Houdini官方插件代码

前言 Houdini官方插件名字叫 “Houdini Engine”,它搭建了Houdini数据与UE4数据间的桥梁。我接触这个插件已经有段时间了,我想是时候梳理一下插件的结构了。(当前我用的UE4版本是4.24.2,Houdini版本18.0.348) 需要说明的是,这篇博客主要是从代码出发的。我准备先分析插件整体的代码结构,再逐个翻阅每个文件试图搞明白他角色。但如果不准备研究代码结构和实现

【UE4源代码观察】观察TargetPlatform模块

前情提要与本次目标 在之前的博客《【UE4源代码观察】观察 RHI、D3D11RHI、RenderCore 这三个模块的依赖关系》中,我将RHI、D3D11RHI、RenderCore这三个模块加入了我的空白工程中并确保可以成功编译。然而当时RenderCore模块有一个比较大的缺失:没有让shader相关的功能正常编译,因为它需要TargetPlatform模块中的内容。 因此,这次我想观察

【UE4源代码观察】尝试调试UBT

前言 在之前的博客《【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程》中我尝试动手搭建了一个用UBT进行编译的空白的工程。但是对UBT其中的逻辑并不理解。 后来在学习UE4源代码的过程中,又了解了它的一些行为。目前,对我影响较大的是:1.他会有一些逻辑去添加一些宏。2.他会有一些逻辑去给修改ModuleRules(和.build.cs中内容的角色一样)。这时候我发现一些和预期不太一

试用UE4的纹理数组(UTexture2DArray)

UTexture2DArray 我发现在我目前使用的版本(4.25)中,官方已经实现了纹理数组(可能在4.24或更早版本就已经实现了)。 纹理数组,其含义不言而喻。一个重要作用是可以使用更多的纹理而不受制于sampler数目限制。 这一篇里我想对官方的纹理数组进行一下简单的试用。 试用 0. 启用纹理数组 虽然我看到了代码中有UTexture2DArray这个类,不过一开始并没有在编辑器