内容纲要

Blueprint Enchant(蓝图增强)使用教程

翻译: 简体中文 | English

购买地址:https://www.fab.com/listings/ef857570-8ac7-4d32-a55b-492fe2236f43


1. 在蓝图里找到节点的方法

  1. 打开任意蓝图。
  2. 在图表空白处 右键 打开“添加节点”搜索框。
  3. 通过分类或关键词搜索:
    • Blueprint Enchant | Array
    • Blueprint Enchant | Bytes
    • Blueprint Enchant | Math
    • Blueprint Enchant | Math | Constants
    • Blueprint Enchant | Math | Limits
    • Blueprint Enchant | Misc
    • Blueprint Enchant | Texture
    • Blueprint Enchant | String | Language

建议直接搜节点显示名(如 Sort ArrayScreen ShotGet Pi )。


2. Array(数组)节点用法(Blueprint Enchant | Array)

这组节点大多是“泛型数组节点”:你在蓝图里接入什么类型的数组,就会按该类型工作(以节点提示为准)。

2.1 Sort Array(Sort)

  • 节点名Sort Array(紧凑标题:Sort
  • 输入
    • TargetArray:目标数组(会被排序)
    • SortOrder:排序方式(Ascending/Descending)
  • 输出:无(直接修改数组)

2.2 Pop(弹出末尾)

  • 节点名Pop
  • 输入
    • TargetArray:目标数组
  • 输出
    • PopValue:被移除的最后一个元素(拷贝)

2.3 Push(追加到末尾)

  • 节点名Push
  • 输入
    • TargetArray
    • PushValue:要追加的元素
  • 输出
    • Result:追加进去的元素(通常等于 PushValue,用于链式连接)

2.4 Dedupe(去重)

  • 节点名Dedupe
  • 输入
    • TargetArray
  • 输出:无(直接修改数组)
  • 用途:对数组做去重(把重复元素移除)

2.5 Average(求平均)

  • 节点名Average(紧凑标题:Avg.
  • 输入
    • TargetArray:数值数组
  • 输出
    • Result:平均值(float)

2.6 NextPermutation / PrevPermutation(排列迭代)

  • 节点名NextPermutationPrevPermutation
  • 输入
    • TargetArray:数值数组
  • 输出:无(直接修改数组)

2.7 Intersection / Union / Difference(集合运算)

  • 节点名
    • Intersection:交集
    • Union:并集
    • Difference:差集(以节点注释为准:A 与 B 的差集)
  • 输入
    • AB:两个数组
  • 输出
    • Result:结果数组

2.8 Random By Weight(按权重随机)

  • 节点名Random By Weight
  • 输入
    • Array:元素数组(任意类型)
    • WeightArray:权重数组(float),长度必须与 Array 相同
  • 输出
    • Element:抽到的元素

3. Bytes(字节/内存序列化)节点用法(Blueprint Enchant | Bytes)

用于把“任意参数/结构体”等转换为字节数组,或从字节数组写回参数(适合存档、自定义网络封包、对比/哈希前的统一数据等)。

3.1 Get Param Memory Bytes(把参数转成字节数组)

  • 节点名Get Param Memory Bytes
  • 输入
    • RefParam:任意类型参数(支持结构体等,按蓝图可接入的类型为准)
  • 输出
    • 返回值:TArray<uint8>
  • 用法示例
    1. 放一个变量(例如某个结构体变量 MyStruct
    2. 调用 Get Param Memory Bytes(MyStruct)
    3. 得到 Byte 数组,可保存到文件/存档等

3.2 Set Param Memory Bytes(用字节数组覆盖参数)

  • 节点名Set Param Memory Bytes
  • 输入
    • RefParam:要被写入的参数(引用)
    • BytesArray:字节数组
  • 输出:无
  • 使用步骤
    1. 准备一个要写回的变量(类型必须与字节来源匹配)
    2. 调用 Set Param Memory Bytes(变量, BytesArray)

3.3 Set Param Memory Index Byte / Get Param Memory Index Byte(读写单字节)

  • 节点名
    • Set Param Memory Index Byte
    • Get Param Memory Index Byte
  • 输入
    • RefParam:目标参数
    • Index:索引
    • Byte:要写入/读取的字节
  • 输出
    • Get:Byte(out)
  • 用途:对序列化后的参数内存按索引进行调试或微调(使用时注意索引范围)。

3.4 BytesToString / StringToBytes(字符串与字节数组互转)

  • BytesToString
    • 输入:Bytes
    • 输出:String
  • StringToBytes
    • 输入:String
    • 输出:Bytes(追加写入)
  • 用法
    • 做文本协议/日志落盘/简单序列化时可用。

4. Math(数学)节点用法(Blueprint Enchant | Math)

4.1 Even / Odd(奇偶判断)

  • 节点名EvenOdd
  • 输入Value(int)
  • 输出:bool

4.2 Get Angle Between Two Vectors(向量夹角)

  • 节点名
    • Get Angle Between Two Vectors (Degrees):返回角度制
    • Get Angle Between Two Vectors (Radians):返回弧度制
  • 输入
    • VectorAVectorB
  • 输出
    • double
  • 用法
    • 计算两个方向向量夹角,例如角色朝向与目标方向的偏角。

5. Math 常量/极值(Blueprint Enchant | Math | Constants / Limits)

5.1 Pi

  • 节点名Get Pi(紧凑标题:PI
  • 输出:double

5.2 数值极限

  • 节点名
    • Get Int32 Max(I32_MAX)
    • Get Int32 Min(I32_MIN)
    • Get Int64 Max(I64_MAX)
    • Get Int64 Min(I64_MIN)
    • Get Float Max(F_MAX)
    • Get Float Smallest Positive (Normal)(F_MIN+)
    • Get Float Epsilon(F_EPS)
    • Get Double Max(D_MAX)
    • Get Double Smallest Positive (Normal)(D_MIN+)
    • Get Double Epsilon(D_EPS)
  • 用途
    • 做边界判断、归一化保护、避免除零等。

6. Misc(杂项)节点用法(Blueprint Enchant | Misc)

6.1 Set Struct Property / Get Struct Property(按名称读写结构体字段)

  • 节点名
    • Set Struct Property
    • Get Struct Property
  • 输入
    • Struct:结构体(按引用传入)
    • PropertyName:属性链名称(支持 . 链式)
    • Value:要写入/读出的字符串值
  • 输出
    • 返回值:bool(是否执行成功)
    • Get 还会输出 Value(字符串)
  • PropertyName 写法
    • 普通字段:Health
    • 子结构体:Stats.Health
    • 数组下标:Items[0]
    • 混合链:Inventory.Items[2].Count
  • Value 写法(常见)
    • 数字:"123" / "3.14"
    • 布尔:"true" / "false"
    • 向量/颜色等:按 UE 文本导入格式填写(不确定时可先用 Get 读出一次看看格式)
  • 使用示例流程
    1. 结构体变量 PlayerData
    2. Set Struct Property(PlayerData, "Stats.Health", "100")
    3. Get Struct Property(PlayerData, "Stats.Health", Value) 打印 Value

6.2 Save Object To Disk(保存对象为资产到工程内容目录)

  • 节点名Save Object To Disk
  • 输入
    • Object:要保存的 UObject(例如运行时创建的纹理等)
    • Path:包路径(例如 "/Game/TestObject"
    • AssetName:资产名(例如 "TestObject"
  • 输出
    • bool:是否保存成功
  • 使用步骤
    1. 准备一个对象(如运行时创建的 Texture2D)
    2. 设置 Path/Game/某文件夹/某资产包名(示例:/Game/Generated/MyTex
    3. AssetName 填资产显示名称(示例:MyTex
    4. 调用节点保存

6.3 Screen Shot(截图保存 PNG)

  • 节点名Screen Shot
  • 输入
    • Path:保存路径(例如 D:/ScreenShot.png
  • 输出:无
  • 使用步骤
    1. 在游戏运行后(Viewport 初始化完成后)调用
    2. 传入你要保存的绝对路径
    3. 在磁盘查看输出 PNG

6.4 GenerateRandomString / GenerateRandomStringFromDict(随机字符串)

  • GenerateRandomString
    • 输入:LengthMatchSymbol(是否包含符号)
    • 输出:随机字符串
  • GenerateRandomStringFromDict
    • 输入:Dict(自定义字符集)、Length
    • 输出:随机字符串
  • 用途
    • 临时 ID、随机昵称、一次性码等。

7. Texture(纹理)节点用法(Blueprint Enchant | Texture)

多数会生成“Transient Texture”(临时纹理,运行时存在,不会自动保存为资产)。需要落盘可配合 Save Object To Disk 或自己写文件。

7.1 GetTextureChannel(提取单通道)

  • 节点名GetTextureChannel
  • 输入
    • InputTexture
    • TextureChannel:B/G/R/A
  • 输出
    • UTexture2D*(单通道纹理,通常是灰度表现)
  • 用法
    1. 传入任意 Texture2D
    2. 选择通道(例如取 A 做遮罩)
    3. 用返回纹理去做材质/UMG 显示等

7.2 GetTextureGray(转灰度)

  • 节点名GetTextureGray
  • 输入
    • InputTexture
    • UseAverage:true 使用 (R+G+B)/3;false 使用加权灰度
  • 输出
    • 灰度纹理(Transient)
  • 用途:生成灰度图、做阈值/遮罩前处理等。

7.3 GetTextureAverageColor(平均色)

  • 节点名GetTextureAverageColor
  • 输入InputTexture
  • 输出FColor
  • 用途:提取主色调、UI 自适应配色等。

7.4 GetTextureColor(取某像素颜色)

  • 节点名GetTextureColor
  • 输入
    • InputTexture
    • XY:像素坐标
  • 输出
    • FLinearColor
  • 注意
    • X/Y 要在纹理尺寸范围内(0..SizeX-1, 0..SizeY-1)。

7.5 GetTextureColors(取整张图像素数组)

  • 节点名GetTextureColors
  • 输入InputTexture
  • 输出TArray<FColor>
  • 用途:CPU 侧批处理像素(例如采样、统计、生成新图)。

7.6 GetCursorPosColor(取鼠标所在屏幕像素颜色,仅 Windows)

  • 节点名GetCursorPosColor
  • 输出FColor
  • 注意:仅 Windows 平台生效。

7.7 Create Render Target 2D From Texture(由 Texture2D 创建 RT)

  • 节点名Create Render Target 2D From Texture
  • 输入Texture
  • 输出UTextureRenderTarget2D*
  • 用途:把静态纹理转到 RenderTarget,方便后续导出 PNG 或做渲染管线操作。

7.8 Swap Texture Channel(交换通道)

  • 节点名Swap Texture Channel
  • 输入
    • Texture
    • AB:要交换的两个通道(B/G/R/A)
  • 输出
    • 新的 UTexture2D*
  • 用途:修正通道顺序、把 R/A 互换等。

7.9 Get Viewport Pixels(读取当前视口像素)

  • 节点名Get Viewport Pixels
  • 输出
    • Colors:FColor 数组
    • XY:视口宽高
  • 用法
    1. 游戏运行且视口已初始化
    2. 调用后得到屏幕像素数组
    3. 可配合 Create Texture From Pixels 生成纹理

7.10 Set Texture Channel Value(把整张图某通道置为固定值)

  • 节点名Set Texture Channel Value
  • 输入
    • Texture:要求是 BGRA8 格式(按节点注释)
    • ChannelType
    • Value:0~255
  • 用途
    • 例如把 Alpha 全部设为 255(不透明)
  • 示例
    • Set Texture Channel Value(Texture, A, 255)

7.11 Create Texture From Pixels(由像素数组创建 Texture2D)

  • 节点名Create Texture From Pixels
  • 输入
    • Pixels:FColor 数组(通常长度 = X*Y)
    • XY
  • 输出
    • UTexture2D*(B8G8R8A8)
  • 用途
    • Get Viewport Pixels 的结果变成一张纹理,或把你自己生成的像素数据变成纹理。

8. String | Language(数字转语言文本)

8.1 DigitToChinese / DigitToEnglish / DigitToJapanese(单个数字 0-9)

  • 节点名
    • DigitToChinese(D, bUseLiangFor2)
    • DigitToEnglish(D)
    • DigitToJapanese(D)
  • 输入
    • D:0~9
    • 中文额外参数:bUseLiangFor2(2 是否用“两”)
  • 输出:对应语言的数字文本

8.2 ConvertToChineseNumeric / ConvertToEnglishNumeric / ConvertToJapaneseNumeric(整数转读法)

  • 节点名
    • ConvertToChineseNumeric(InNumber)
    • ConvertToEnglishNumeric(InNumber)
    • ConvertToJapaneseNumeric(InNumber)
  • 输入:整数(支持负数)
  • 输出:字符串
  • 用途
    • UI 显示数字读法(如中文金额、英文读数、日文读数等)。

9. 常见用法示例

9.1 截图保存到磁盘

  1. 调用 Screen Shot
  2. Path 传入:D:/MyShot.png

9.2 从视口像素生成纹理并保存为资产(编辑器/允许保存时)

  1. Get Viewport Pixels 得到 Colors, X, Y
  2. Create Texture From Pixels(Colors, X, Y) 得到 Texture
  3. Set Texture Channel Value(Texture, A, 255)(设为不透明)
  4. Save Object To Disk(Texture, "/Game/Generated/MyViewportTex", "MyViewportTex")

9.3 按权重抽奖

  1. Array = [ItemA, ItemB, ItemC]
  2. WeightArray = [0.1, 0.3, 0.6]
  3. Random By Weight 输出 Element,即中奖项

10. 注意事项(使用层面)

  • Get Viewport Pixels / Screen Shot:需要视口初始化完成后调用(通常 BeginPlay 之后/延迟一帧较为合理)。
  • 纹理处理类节点通常较慢:避免在 Tick 高频调用(尤其是整图像素解码/遍历相关)。
  • Set Struct Property / Get Struct PropertyPropertyName 建议先用简单字段名验证,再逐步增加链式/数组下标,便于排错。
  • Save Object To Disk:保存路径使用包路径(如 /Game/...),并确保 AssetName 合法且不为空。

滚动至顶部