SuperAPI AI 工具集

blueprint-fundamentals

编程与开发

查看项目

更新于 11-06 16:21

技能介绍

本技能围绕虚幻引擎(Unreal Engine)蓝图的基础概念展开,核心是帮助理解蓝图在引擎对象模型中究竟是什么,以及它与 C++ 的对应关系。

一、用途 主要用于:判断某段逻辑应放在 C++ 还是蓝图中;设计“C++ 基类 + 蓝图子类”架构;理解蓝图变量/函数/事件与 UPROPERTY/UFUNCTION 的对应;用 UObject/反射模型解释蓝图行为;排查蓝图编译错误、重设父类与类层次问题。

二、核心架构:双对象 每个蓝图由两个协作对象构成:

  • UBlueprint:仅编辑器使用的资产,保存图、变量元数据、组件模板、编译选项。
  • UBlueprintGeneratedClass:运行时 UClass,包含 FProperty、UFunction、时间轴和 SCS 树。 UBlueprint 派生自 UBlueprintCore,其中保存 SkeletonGeneratedClass(编辑器用、无字节码的轻量类)与 GeneratedClass(完整编译后的运行时类)。运行时只存在 UBlueprintGeneratedClass,生成类名为 <BlueprintName>C,其 CDO 为 Default_<BlueprintName>_C。

三、蓝图类型 由 EBlueprintType 决定:普通蓝图类(BPTYPE_Normal)、关卡蓝图(BPTYPE_LevelScript,每关一个、不可复用)、蓝图接口(BPTYPE_Interface,仅声明签名)、蓝图宏库(BPTYPE_MacroLibrary)、蓝图函数库(BPTYPE_FunctionLibrary,静态工具函数)。

四、图类型 事件图(Uber-graph UFunction,运行时触发)、函数(独立 UFunction,可被子类重写)、构造脚本(对应 OnConstruction(Transform))、宏(编译期内联,无独立调用帧)、接口(经接口 thunk 派发)。执行沿白色 exec 线流动,数据沿彩色类型线流动;纯节点无 exec 引脚、无副作用,惰性求值。函数有调用帧且可重写,宏在编译时复制进图,可有多个 exec 进出引脚和 latent 节点。

五、变量与组件 蓝图变量编译为 UBlueprintGeneratedClass 上的 FProperty,其标志直接映射 UPROPERTY:Instance Editable→EditAnywhere,Blueprint Read/Write→BlueprintReadWrite,Blueprint Read Only→BlueprintReadOnly,Expose on Spawn→ExposeOnSpawn,Replicated→Replicated,Transient→Transient。Category 仅用于细节面板分组,无运行时效果,但 BlueprintReadWrite 属性默认需设置才在编辑器显示。函数内局部变量只存在于调用栈。组件面板对应 USimpleConstructionScript(SCS)树,ExecuteScriptOnActor 在 Actor 构造时实例化模板并按层级挂接;C++ 构造器中创建的原生组件先存在,SCS 组件可挂到其下。时间轴编译为 Timelines 并成为实例上的 UTimelineComponent。

六、Construction Script 映射到 AActor::OnConstruction(Transform),在每次 Actor 生成(含 PIE)、编辑器中属性修改、编辑器拖拽(bRunConstructionScriptOnDrag)时运行,应设计为幂等;不要做世界查询、生成或游戏性调用,昂贵操作会拖慢属性编辑。

七、C++ 基类 + 蓝图子类 典型模式:C++ 基类承载核心逻辑、复制状态与稳定 API,用 UCLASS(Blueprintable, BlueprintType)、UPROPERTY(EditAnywhere, BlueprintReadWrite)、UFUNCTION(BlueprintCallable/BlueprintImplementableEvent/BlueprintNativeEvent) 暴露;蓝图子类负责默认值、资产指派、事件接线与变体配置。TSubclassOf<AWeaponBase> 让设计者选择要生成的蓝图变体,SpawnActor 会应用其默认值与构造脚本。

八、选择建议与陷阱 C++ 适合性能关键路径、紧循环、复制内部实现、大型分支系统、需单元测试的逻辑与稳定基类 API;蓝图适合逐资产配置、设计调参、简单事件响应、原型、UI/动画胶水与内容引用。避免深层嵌套的大型蓝图图。常见陷阱:蓝图 VM 在算术与紧循环上慢于 C++;二进制资产无法文本合并,多人同时改同一蓝图会丢改动;重设父类可能破坏节点连接;Cast 节点产生硬引用,建议用接口或 C++ 基类型解耦;蓝图 Actor 默认 bCanEverTick=true,不需要时应关闭;构造脚本在编辑器中运行,不能做游戏性操作;PIE 中未编译蓝图会有过期警告。

九、版本说明 UE5+ 推荐 TObjectPtr<T> 成员指针;蓝图 nativization(BP→C++)在 UE 5.0 已移除,不应再引用;双对象拆分、SCS 与图类型在 UE5 中保持稳定。

官方文档可参考虚幻引擎的 Blueprints Visual Scripting、Types of Blueprints、Construction Script、Blueprint Compiler Overview 与 Blueprint Best Practices 页面。