UE蓝图 宏(Macro)节点和源码

系列文章目录

UE蓝图 Get节点和源码
UE蓝图 Set节点和源码
UE蓝图 Cast节点和源码
UE蓝图 分支(Branch)节点和源码
UE蓝图 入口(FunctionEntry)节点和源码
UE蓝图 返回结果(FunctionResult)节点和源码
UE蓝图 函数调用(CallFunction)节点和源码
UE蓝图 序列(Sequence)节点和源码
UE蓝图 宏(Macro)节点和源码


文章目录

  • 系列文章目录
  • 一、宏节点功能
  • 二、宏节点用法
  • 三、宏使用场景
  • 四、相关源码


一、宏节点功能

在这里插入图片描述

宏有一个由Tunnel节点 指定的入口点和出口点。每个Tunnel都可以有任意数量的执行或数据引脚,当在其他蓝图和图表中使用时, 这些引脚在宏节点上可见。宏用于封装和管理蓝图逻辑,提高代码的可读性和可维护性。通过合理使用蓝图宏节点,可以使UE4项目的开发更加高效和灵活。

二、宏节点用法

在 我的蓝图(My Blueprint) 选项卡中,单击宏列表标头 在这里插入图片描述
上的 添加按钮(Add Button) 创建一个新宏。

为您的蓝图宏输入一个名称。

name_macro_blueprint.png

您的蓝图宏将在蓝图编辑器的 图表(Graph) 选项卡中的新选项卡中打开。

构建蓝图宏
当您第一次创建蓝图宏时,将打开一个包含 输入(Inputs) 隧道节点和 输出(Outputs) 隧道节点的新图表。

在这里插入图片描述

在蓝图宏的 细节(Details) 窗格中,可添加输入和输出执行引脚和数据引脚。您还可以设置蓝图宏的 描述(Description)、类别(Category) 和 实例颜色(Instance Color)。

在这里插入图片描述

若要添加输入或输出参数,请执行以下操作:

在 细节(Details) 窗格的 输入(Inputs) 或 输出(Outputs) 部分中,单击 新建(New) 按钮。

命名新参数并使用下拉菜单设置其类型。在本例中,有一个名为 分数(Score) 的整数数据输入参数,一个名为 测试(Test) 的输入执行引脚,以及两个名为 赢(Win) 和 输(Lose) 的输出执行引脚。

macro_details.png

与函数不同,宏可以有多个输出执行引脚,因此可以有根据图表逻辑的结果 激活不同输出执行引脚的执行流。此外,只要宏中的节点不是执行节点,您就可以拥有一个没有执行引脚的宏,该宏只操作数据。

三、宏使用场景

UE(Unreal Engine)中的蓝图宏节点用以提高蓝图的可读性、可维护性和重用性。以下是一些UE蓝图宏节点的使用场景:

  1. 重复逻辑封装:当在蓝图中遇到重复的逻辑代码块时,可以将这些代码块封装成宏节点。例如,在角色切换时,镜头需要平滑地移动过去,这个逻辑可能会在多个地方重复使用。通过将其封装成宏节点,可以简化蓝图并减少重复代码。
  2. 复杂功能模块化:对于复杂的功能或系统,可以将其拆分成多个独立的宏节点。每个宏节点负责一个特定的功能或任务,这样可以使蓝图更加模块化,便于管理和维护。
  3. 条件判断和循环执行:蓝图宏节点支持条件判断和循环执行,这使得在蓝图中实现复杂的控制流程变得更加容易。例如,可以根据不同的游戏状态或条件来执行不同的逻辑分支。
  4. 参数化和灵活配置:蓝图宏节点可以接受输入参数,并根据这些参数来执行不同的操作。这使得宏节点更加灵活和可配置,可以根据不同的需求来调整其行为。
  5. 提高代码可读性和可维护性:通过将复杂的逻辑封装成宏节点,并使用清晰的节点名称和引脚标签,可以提高蓝图的可读性和可维护性。这对于团队合作和长期项目来说尤为重要。

总之,UE蓝图宏节点适用于封装重复逻辑、模块化复杂功能、实现条件判断和循环执行等场景。通过使用蓝图宏节点,可以提高蓝图的可读性、可维护性和重用性,使游戏开发更加高效和灵活。

四、相关源码

相关类结构
在这里插入图片描述

源码文件:
UK2Node_MacroInstance.h
UK2Node_MacroInstance.cpp
UK2Node_Tunnel.h
UK2Node_Tunnel.cpp
相关类:
UK2Node_MacroInstance
UK2Node_Tunnel
UK2Node_Tunnel


UCLASS(MinimalAPI)
class UK2Node_MacroInstance : public UK2Node_Tunnel
{GENERATED_UCLASS_BODY()private:/** A macro is like a composite node, except that the associated graph lives* in another blueprint, and can be instanced multiple times. */UPROPERTY()class UEdGraph* MacroGraph_DEPRECATED;UPROPERTY()FGraphReference MacroGraphReference;public:/** Stored type info for what type the wildcard pins in this macro should become. */UPROPERTY()struct FEdGraphPinType ResolvedWildcardType;/** Whether we need to reconstruct the node after the pins have changed */bool bReconstructNode;//~ Begin UObject Interfacevirtual void Serialize(FArchive& Ar) override;//~ End UObject Interface//~ Begin UEdGraphNode Interfacevirtual void AllocateDefaultPins() override;virtual void PreloadRequiredAssets() override;virtual FText GetTooltipText() const override;virtual FText GetKeywords() const override;virtual void PostPasteNode() override;virtual FLinearColor GetNodeTitleColor() const override;virtual FText GetNodeTitle(ENodeTitleType::Type TitleType) const override;virtual bool CanUserDeleteNode() const override { return true; }virtual void GetNodeContextMenuActions(class UToolMenu* Menu, class UGraphNodeContextMenuContext* Context) const override;virtual void NodeConnectionListChanged() override;virtual FString GetDocumentationLink() const override;virtual FString GetDocumentationExcerptName() const override;virtual FSlateIcon GetIconAndTint(FLinearColor& OutColor) const override;virtual bool CanPasteHere(const UEdGraph* TargetGraph) const override;virtual UObject* GetJumpTargetForDoubleClick() const override { return GetMacroGraph(); }//~ End UEdGraphNode Interface//~ Begin UK2Node Interfacevirtual bool DrawNodeAsExit() const override { return false; }virtual bool DrawNodeAsEntry() const override { return false; }virtual void NotifyPinConnectionListChanged(UEdGraphPin* Pin) override;virtual void PostReconstructNode() override;virtual bool HasExternalDependencies(TArray<class UStruct*>* OptionalOutput) const override;virtual void GetNodeAttributes( TArray<TKeyValuePair<FString, FString>>& OutNodeAttributes ) const override;virtual FText GetMenuCategory() const override;virtual int32 GetNodeRefreshPriority() const override { return EBaseNodeRefreshPriority::Low_UsesDependentWildcard; }virtual FBlueprintNodeSignature GetSignature() const override;virtual bool IsActionFilteredOut(class FBlueprintActionFilter const& Filter) override;virtual FText GetCompactNodeTitle() const override;virtual bool ShouldDrawCompact() const override;virtual FName GetCornerIcon() const override;//~ End UK2Node Interface//~ Begin UK2Node_EditablePinBase Interfacevirtual bool CanCreateUserDefinedPin(const FEdGraphPinType& InPinType, EEdGraphPinDirection InDesiredDirection, FText& OutErrorMessage) override { return false; }//~ End UK2Node_EditablePinBase Interface// Begin UK2Node_Tunnel interfacevirtual void PostFixupAllWildcardPins(bool bInAllWildcardPinsUnlinked) override;// End UK2Node_Tunnel interfacevoid SetMacroGraph(UEdGraph* Graph) { MacroGraphReference.SetGraph(Graph); }UEdGraph* GetMacroGraph() const { return MacroGraphReference.GetGraph(); }UBlueprint* GetSourceBlueprint() const { return MacroGraphReference.GetBlueprint(); }// Finds the associated metadata for the macro instance if there is any; this function is not particularly fast.BLUEPRINTGRAPH_API static FKismetUserDeclaredFunctionMetadata* GetAssociatedGraphMetadata(const UEdGraph* AssociatedMacroGraph);static void FindInContentBrowser(TWeakObjectPtr<UK2Node_MacroInstance> MacroInstance);private:/** Constructing FText strings can be costly, so we cache the node's tooltip */FNodeTextCache CachedTooltip;
};

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

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

相关文章

JWT基于Cookie的会话保持,并解决CSRF问题的方案

使用JWT进行浏览器接口请求&#xff0c;在使用Cookie进行会话保持传递Token时&#xff0c;可能会存在 CSRF 漏洞问题&#xff0c;同时也要避免在产生XSS漏洞时泄漏Token问题&#xff0c;如下图在尽可能避免CSRF和保护Token方面设计了方案。 要点解释如下&#xff1a; 将JWT存入…

PclSharp--计算AABB包围盒体积2

一、AABB包围盒 AABB包围盒即轴对齐包围盒&#xff0c;就是包围盒对齐坐标轴。计算相对简单&#xff0c;在要求不精细的情况下&#xff0c;这种包围盒是够用的。 MomentOfInertiaEstimation 是 PCL中的一个类&#xff0c;用于计算点云中物体的矩。它可以提供点云物体的三个主…

【HarmonyOS】鸿蒙开发之Video组件——第3.7章

Video组件内VideoOptions属性简介 src&#xff1a;设置视频地址。currentProgressRate&#xff1a;设置视频播放倍速&#xff0c;参数说明如下&#xff1a; number|string&#xff1a;只支持 0.75 &#xff0c; 1.0 &#xff0c; 1.25 &#xff0c; 1.75 &#xff0c; 2.0 。P…

IDEA利用鼠标调整字体大小

就可以按住ctrl和鼠标调节代码字体的大小啦&#xff01; 如果有用&#xff0c;记得给我来个赞~ 谢啦&#xff01;

Flutter中高级JSON处理:使用json_serializable进行深入定制

Flutter中高级JSON处理 使用json_serializable库进行深入定制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/1363…

小红书母婴博主推广方式汇总,投放总结

母婴博主有区别于其他博主&#xff0c;她需要一定的行业知识&#xff0c;需要取得粉丝的一定信任&#xff0c;才能顺利传播进而一步一步成长。今天和大家分享下小红书母婴博主推广方式汇总&#xff0c;投放总结&#xff01; 1、小红书母婴博主有哪些领域 母婴博主不同于育儿博主…

windows定时备份日志文件

前言 之前项目因为各种原因没有上 CI/CD&#xff0c;也没有部署什么 nginx 管理工具&#xff0c;再加上 nginx 部署在 windows server 上&#xff0c;面对日积月累不停膨胀的日志文件&#xff0c;需要一个定时脚本处理自动分割日志文件。 本篇文章主要讲解如何在 windows 上创…

28. 找出字符串中第一个匹配项的下标(力扣LeetCode)

文章目录 28. 找出字符串中第一个匹配项的下标题目描述暴力KMP算法 28. 找出字符串中第一个匹配项的下标 题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。…

【.NET Core】深入理解IO之File类

【.NET Core】深入理解IO之File类 文章目录 【.NET Core】深入理解IO之File类一、概述二、File类2.1 File.AppendAllLines方法2.2 File.AppendAllText方法2.3 File.Copy 方法2.4 File.Create 方法2.5 File.Decrypt(String) 方法2.6 File.Delete(String) 方法2.7 File.Move 方法…

Linux系统——Nginx拓展

目录 一、重写功能——rewrite 1.if 1.1 if 2. return 2.1状态码301和302的区别 301 302 3. set 4. break 5. rewrite 5.1 rewrite flag使用 5.2 flag说明 5.3举例 5.3.1访问 bj 跳转 beijing 5.3.2举例——break 5.3.3 http 转 https 5.3.4 break 与 last …

亿道信息新品EM-T195轻薄型工业平板,隆重登场!

EM-T195是一款轻巧但坚固的平板电脑&#xff0c;仅 650克重、10.5mm毫米厚&#xff0c;即使没有额外的便携配件进行辅助&#xff0c;您也可以轻松将其长时间随身携带。耐用性外壳完全密封&#xff0c;防尘防潮&#xff1b;出色的坚固性和可靠性&#xff0c;使T195天生适合在苛刻…

[Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包

一、设置应用包名 在Flutter开发中&#xff0c;修改应用程序的包名&#xff08;也称作Application ID&#xff09;涉及几个步骤&#xff0c;因为包名是在项目的Android和iOS平台代码中分别配置的。请按照以下步骤操作&#xff1a; 1.Android Flutter工程中全局搜索替换包名 …

安全防御-第六次

内容安全 攻击可能只是一个点&#xff0c;防御需要全方面进行 DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对数据包的内容进行识别。&#xff08;应用层&…

300分钟吃透分布式缓存-17讲:如何理解、选择并使用Redis的核心数据类型?

Redis 数据类型 首先&#xff0c;来看一下 Redis 的核心数据类型。Redis 有 8 种核心数据类型&#xff0c;分别是 &#xff1a; & string 字符串类型&#xff1b; & list 列表类型&#xff1b; & set 集合类型&#xff1b; & sorted set 有序集合类型&…

ABB 机械手设定IP地址

设定ABB机械手IP地址步骤如下&#xff1a; 打开示教器 控制面板 2.打开配置 3.点击IP Setting

Web服务器群集:OpenEuler 部署 LAMP(LNMP) 基础服务

目录 一、实验 1.环境 2. 网络配置 3. MobaXterm远程连接 4. apache 2.4.58 源码编译安装 5. php 8.3.1源码编译安装 6.配置httpd 连接 php-fpm 6. nginx 1.24.0源码编译安装 7. mysql 8.0.36安装 二、问题 1.MobaXterm设置右键复制粘贴 2.OpenEuler如何查看CPU的核…

SQL注入漏洞解析-less-8(布尔盲注)

我们来看一下第八关 当我们进行尝试时&#xff0c;他只有You are in...........或者没有显示。 他只有对和错显示&#xff0c;那我们只能用对或者错误来猜他这个数据库 ?id1%27%20and%20ascii(substr(database(),1,1))>114-- ?id1%27%20and%20ascii(substr(database(),1,…

防火墙的内容安全

目录 1. 内容安全 1.1 IAE引擎 DPI---深度包检测技术 DFI---深度流检测技术 结论(优缺点)&#xff1a; 1.2 入侵防御&#xff08;检测&#xff09;(IPS) IPS的优势: 入侵检测的方法: 入侵检测的流程 签名 查看预定义签名的内容 新建自定义签名 入侵防御的检测…

什么时候要用到Reflect API?

参考文档 https://www.zhihu.com/question/460133198 https://cn.vuejs.org/guide/extras/reactivity-in-depth.html https://juejin.cn/post/7103764386220769311 Reflect API 一般搭配 Proxy API 一起使用。什么是 Proxy API 呢&#xff1f; 先回顾下 vue 的数据响应性是如何…

没有货币化,郎酒也能用大营销让经销商赚到钱?

文&#xff5c;琥珀食酒社 作者 | 五画 一年卖一千亿&#xff0c;这是郎酒在去年9月8日定下的目标。 当时正值第三届郎酒庄园会员节之际&#xff0c;郎酒集团董事长汪俊林从使命、愿景、价值观等十二个方面发布“百年郎酒”总纲领。 为郎酒立下新的“351”工程发展目标&…