
之前在 UE5.4 项目里做玩法原型时反复遇到同一个需求让 AI 帮忙写蓝图逻辑。网上资料要么只讲 Codex 安装要么只讲 UE 蓝图入门真正把两者串起来的教程很少。加上 UE 蓝图默认保存为.uasset二进制资产AI 编程工具并不能直接修改这些文件所以很多同学一开始会误以为“Codex UE5.4 写蓝图”这条路根本走不通。这篇文章就来解决这个问题。我会先解释 Codex 能做什么、UE5.4 蓝图为什么特殊然后给出三条可落地的实战路线让 Codex 生成 C 类编译后转成蓝图节点让 Codex 生成 Unreal Python 编辑器脚本批量创建蓝图资产让 Codex 输出蓝图节点接线清单人工照图连线。同时会覆盖 Codex 安装、UE5.4 项目准备、常见报错排查和工程最佳实践。新手可以照着一节一节搭环境有 UE 基础的同学可以直接跳到实战部分。1. 背景Codex 与 UE5.4 蓝图到底能不能“写”蓝图1.1 Codex 是什么Codex 是 OpenAI 推出的命令行 AI 编程代理Coding Agent。它和普通聊天窗口不一样它是一个能直接在你的项目目录里工作的终端工具读取文件、修改文件、执行命令、根据运行结果继续修正。官方定位偏向“autonomous coding”也就是把“理解需求 → 写代码 → 运行测试 → 修改问题”这个循环尽量自动化。对 UE 开发者来说Codex 最大的价值是替代一部分重复的 C 或 Python 脚本编写工作。比如生成一个带组件的 Actor 类、写一段批量修改资产路径的编辑器脚本、或者帮你梳理一整套蓝图节点的连线顺序这些工作都很适合交给 Codex 先做一版再由人来 review。1.2 UE5.4 蓝图的特殊性蓝图Blueprint是 Unreal Engine 的可视化脚本系统。在 UE5.4 里蓝图资产保存在.uasset文件中内部包含节点的 GUID、对象引用、序列化后的属性数据本质上是一个二进制资产而不是可读的文本源码。Codex 这类工具擅长处理.py、.cpp、.h、.json等文本文件如果直接让它“打开蓝图、像改代码一样加一个节点”目前官方并没有提供这样的文本映射。所以准确地说Codex 不能直接写.uasset但可以通过间接方式让 AI 写出“能变成蓝图”的东西。这就是本文的出发点。搞清楚这个边界之后剩下的事情就顺畅了。1.3 三条可行路线路线方式核心优势适用场景路线 ACodex 生成 C 类编译后基于该类创建蓝图稳定、可编译、可 diff玩法逻辑、接口复用路线 BCodex 生成 Unreal Python 脚本在编辑器里自动创建蓝图资产批量、可自动化批量建资产、统一配置路线 CCodex 输出节点接线清单人工连线轻量、快速快速原型、纯蓝图项目三条路线不是互斥的实际项目中经常混合使用。下面先把环境搭好再逐一实战。2. 环境准备与版本说明2.1 需要准备的工具工具用途版本建议Node.js安装 Codex CLI 的运行环境18 或更高Codex CLIAI 编程代理以官方最新稳定版为准Unreal Engine 5.4目标引擎5.4.xVisual Studio 2022编译 UE C 项目需要安装“使用 C 的游戏开发”工作负载Git版本管理与 diff 审查2.30 以上本文示例以 Windows UE5.4 为主macOS 的安装思路相同只是路径和命令会有差异。版本号需要根据你的项目实际情况调整不要照抄。2.2 安装 Codex CLICodex CLI 一般通过 npm 全局安装。打开终端执行npm install -g openai/codex安装完成后验证版本codex --version如果系统提示codex命令找不到通常是 npm 全局安装目录没有加入 PATH。可以通过npm root -g查看全局目录再把对应的 bin 目录加入环境变量。macOS 用户也可以尝试brew install codex具体以官方安装方式为准。2.3 登录与配置模型首次使用需要认证。最简单的方式是执行codex login也可以直接配置 API Key# macOS / Linux export OPENAI_API_KEY你的key # Windows PowerShell $env:OPENAI_API_KEY 你的keyCodex 的配置文件默认在用户目录的.codex文件夹下。如果需要自定义模型可以修改~/.codex/config.toml# Windows 下路径通常是 C:\Users\你的用户名\.codex\config.toml model gpt-5注意model名称必须写当前账号可用的模型。不同版本、不同账号的可用模型列表不一样。如果你不确定可以先不配置model登录后直接执行codex exec hi用默认模型跑通流程再调整。不要照抄网上的模型名否则很容易遇到model not supported一类报错。Codex 也支持配置 OpenAI 兼容的第三方模型服务。比如常见的 DeepSeek 提供 OpenAI 兼容接口可以按下面的思路在配置文件中新增 providermodel_providers [ { name deepseek, base_url https://api.deepseek.com/v1, env_key DEEPSEEK_API_KEY } ] model deepseek:deepseek-chat上面只是示意不同 Codex 版本的model_providers字段可能不同请以官方文档为准。使用任何第三方模型服务时都要确保你的调用方式符合对应服务条款。2.4 创建 UE5.4 C 项目新建 UE5.4 项目时建议选择 C 为基础的项目模板而不是纯蓝图项目。因为后续要编译 C 代码C 模板默认带有Source目录和.Build.cs文件省去手动转换的步骤。项目创建完成后右键.uproject文件选择Generate Visual Studio project files生成.sln。然后在 VS2022 中打开解决方案配置选择Development Editor、Win64先编译一次确认基础项目能正常通过。如果不方便用 IDE也可以通过命令行直接编译C:/Program Files/Epic Games/UE_5.4/Engine/Build/BatchFiles/Build.bat MyProjectEditor Win64 Development -ProjectD:/UEProjects/MyProject/MyProject.uproject -WaitMutex路径中的MyProject要替换成你实际的工程名UE 安装路径也要根据你的环境调整。3. 路线一Codex 生成 C 代码把 AI 函数变成蓝图节点3.1 原理说明C 类只要带有UCLASS、UPROPERTY、UFUNCTION这三个反射宏就会进入 UE 的反射系统。编译完成后在内容浏览器中右键点击该类就能基于它创建蓝图子类。此时所有标记为BlueprintCallable的函数和标记为BlueprintReadWrite或EditAnywhere的属性都会自动出现在蓝图面板里。AI 写的 C 代码就这样变成了蓝图节点。完整流程如下Codex 生成 PickupActor.h / PickupActor.cpp ↓ VS2022 编译Development Editor ↓ UE5.4 编辑器识别 APickupActor ↓ 内容浏览器中右键 PickupActor选择 Create Blueprint based on this class ↓ 蓝图里出现 AI 生成的函数和属性节点所以这条路线的本质是让 AI 写文本源码再借助 UE 的反射系统把源码映射成蓝图节点。3.2 让 Codex 生成 PickupActor先在 UE5.4 项目目录下打开终端然后给 Codex 一个明确的提示词cd D:/UEProjects/MyProject codex exec 你是 UE5.4 的 C 游戏玩法工程师。请在 Source/MyProject 目录下创建拾取物 Actor 类 PickupActor。要求1. 继承 AActor标记 Blueprintable2. 包含 UBoxComponent 作为碰撞根组件、UStaticMeshComponent 作为外观组件3. 暴露 ItemID、StackCount、bDestroyOnPickup 三个可在蓝图编辑的属性4. 提供 BlueprintCallable 的 OnPickup 函数5. 当有带 Player 标签的角色碰撞时自动调用 OnPickup。请先读取项目中已有类的写法保持代码风格一致。Codex 通常会先读取目录结构再生成或修改文件。以拾取物为例下面是它可能生成的PickupActor.h实际内容会因模型和提示词不同而略有差异但核心结构是类似的// 文件路径Source/MyProject/PickupActor.h #pragma once #include CoreMinimal.h #include GameFramework/Actor.h #include PickupActor.generated.h class UBoxComponent; class UStaticMeshComponent; UCLASS(Blueprintable) class MYPROJECT_API APickupActor : public AActor { GENERATED_BODY() public: APickupActor(); protected: virtual void BeginPlay() override; public: // 碰撞盒组件 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category Pickup) TObjectPtrUBoxComponent CollisionBox; // 静态网格体组件 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category Pickup) TObjectPtrUStaticMeshComponent MeshComponent; // 道具 ID UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Pickup) int32 ItemID 0; // 堆叠数量 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Pickup) int32 StackCount 1; // 拾取后是否销毁 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Pickup) bool bDestroyOnPickup true; // 蓝图可调用的拾取函数 UFUNCTION(BlueprintCallable, Category Pickup) void OnPickup(); // 碰撞回调 UFUNCTION() void HandleOverlap( UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult SweepResult); };对应的实现文件可能是这样的// 文件路径Source/MyProject/PickupActor.cpp #include PickupActor.h #include Components/BoxComponent.h #include Components/StaticMeshComponent.h APickupActor::APickupActor() { PrimaryActorTick.bCanEverTick false; // 创建碰撞盒并设置为根组件 CollisionBox CreateDefaultSubobjectUBoxComponent(TEXT(CollisionBox)); RootComponent CollisionBox; CollisionBox-SetBoxExtent(FVector(60.f, 60.f, 60.f)); CollisionBox-SetCollisionEnabled(ECollisionEnabled::QueryOnly); CollisionBox-SetCollisionResponseToAllChannels(ECR_Ignore); CollisionBox-SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap); // 创建静态网格体组件 MeshComponent CreateDefaultSubobjectUStaticMeshComponent(TEXT(MeshComponent)); MeshComponent-SetupAttachment(RootComponent); MeshComponent-SetCollisionEnabled(ECollisionEnabled::NoCollision); // 绑定重叠事件 CollisionBox-OnComponentBeginOverlap.AddDynamic(this, APickupActor::HandleOverlap); } void APickupActor::BeginPlay() { Super::BeginPlay(); } void APickupActor::OnPickup() { UE_LOG(LogTemp, Warning, TEXT(Pickup ItemID%d StackCount%d), ItemID, StackCount); if (bDestroyOnPickup) { Destroy(); } } void APickupActor::HandleOverlap( UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult SweepResult) { if (OtherActor OtherActor-ActorHasTag(TEXT(Player))) { OnPickup(); } }这里重点解释几个地方UCLASS(Blueprintable)允许在编辑器中基于该类创建蓝图子类。没有这个标记内容浏览器里不会出现“Create Blueprint based on this class”。UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Pickup)让属性在蓝图细节面板里可见可编辑也允许蓝图运行时读写。UFUNCTION(BlueprintCallable, Category Pickup)让函数在蓝图图表中作为可调用节点出现。CreateDefaultSubobject放在构造函数里确保组件在蓝图生成时默认存在。碰撞回调用AddDynamic绑定这是 UE 动态委托的标准写法。3.3 编译与创建蓝图Codex 生成代码后按下面的步骤操作回到 VS2022选择Development Editor、Win64编译项目。编译成功后回到 UE 编辑器。如果编辑器在运行中会提示模块已重新编译保险起见建议完全关闭编辑器再重新打开。在内容浏览器中右键点击PickupActor选择Create Blueprint based on PickupActor命名为BP_PickupActor。双击打开BP_PickupActor在细节面板的Pickup分组下就能看到ItemID、StackCount、bDestroyOnPickup三个属性。在 Blueprint 图表中右键搜索OnPickup会出现一个PickupActor调用节点这就是 AI 写的函数变成了蓝图可调用节点。这样AI 写的不再是“一段看了还要翻译的代码”而是直接长在了蓝图里。后续如果你想在这个蓝图里接入 UI、动画或关卡事件可以直接在图表中调用OnPickup节点。3.4 这条路线需要注意什么路线 A 最稳定但有一个前提Codex 生成的 C 必须能编译通过。UE 的 C 反射宏和组件初始化方式非常固定只要你在提示词里写清楚“UE5.4、组件类型、反射宏”大部分常见类的生成成功率都比较高。不过AI 不知道你项目里已有的自定义命名和模块依赖。所以提示词里最好加上“先阅读项目中已有类的写法保持风格一致”这能显著降低“风格不一致”和“缺少 include”的问题。4. 路线二Codex 生成 Unreal Python 脚本批量创建蓝图资产4.1 Python 编辑器脚本的作用UE5.4 自带 Python Editor Script Plugin通过unreal模块可以访问编辑器 API。Codex 可以生成这类脚本然后在 UE 编辑器里运行脚本会按程序自动创建蓝图资产、设置属性、保存资产。这里要说明一个边界UE 的官方 Python API 对“节点级连线”的支持目前仍然有限。它能创建蓝图资产、设置父类、保存和复制资产但不能像人类那样在 Event Graph 里直接拖出 If 节点、连执行线。所以路线 B 更适合批量资产管理和自动化准备核心逻辑仍然建议用路线 A 或路线 C。4.2 开启 Python 插件进入 UE5.4 编辑器后打开Edit → Plugins。搜索Python Editor Script Plugin。勾选启用然后重启编辑器。重启后可以在Window → Developer Tools → Python Console打开 Python 控制台也可以在 Output Log 底部的命令行输入框里执行py命令。4.3 让 Codex 生成创建蓝图的 Python 脚本给 Codex 的提示词示例cd D:/UEProjects/MyProject codex exec 请写一个 UE5.4 的编辑器 Python 脚本功能1. 如果 /Game/Blueprints 目录不存在则创建2. 用 BlueprintFactory 创建基于 Actor 的蓝图资产 BP_PickupActor3. 保存资产并打印结果。脚本放到 PyScripts/CreatePickupBlueprint.py注意使用 unreal 模块的官方 API。Codex 可能生成的脚本如下# 文件路径PyScripts/CreatePickupBlueprint.py import unreal def ensure_folder(path: str) - None: 确保资产目录存在 if not unreal.EditorAssetLibrary.does_directory_exist(path): unreal.EditorAssetLibrary.make_directory(path) def create_pickup_blueprint() - bool: folder /Game/Blueprints asset_name BP_PickupActor asset_path f{folder}/{asset_name} ensure_folder(folder) # 如果已存在先删除旧资产避免重复创建报错 if unreal.EditorAssetLibrary.does_asset_exist(asset_path): unreal.EditorAssetLibrary.delete_asset(asset_path) asset_tools unreal.AssetToolsHelpers.get_asset_tools() factory unreal.BlueprintFactory() factory.set_editor_property(parent_class, unreal.Actor) blueprint asset_tools.create_asset(asset_name, folder, unreal.Blueprint, factory) if blueprint is None: unreal.log_error(蓝图创建失败) return False unreal.EditorAssetLibrary.save_asset(asset_path, only_if_is_dirtyTrue) unreal.log(蓝图创建成功 asset_path) return True if __name__ __main__: create_pickup_blueprint()逐行解释一下关键 APIunreal.EditorAssetLibrary.does_directory_exist/make_directory检查目录、创建目录。unreal.EditorAssetLibrary.does_asset_exist/delete_asset资产存在性检查与删除。这里先删除是为了避免同名资产导致create_asset返回None但真实项目中删除资产一定要谨慎。unreal.AssetToolsHelpers.get_asset_tools()获取编辑器资产工具对象。unreal.BlueprintFactory()蓝图工厂负责生成蓝图资产。factory.set_editor_property(parent_class, unreal.Actor)设置蓝图父类。asset_tools.create_asset(asset_name, folder, unreal.Blueprint, factory)真正创建资产。unreal.EditorAssetLibrary.save_asset(asset_path, only_if_is_dirtyTrue)保存资产。4.4 在 UE 中运行 Python 脚本运行方式有三种。第一种在 Output Log 底部的命令行输入框执行py D:/UEProjects/MyProject/PyScripts/CreatePickupBlueprint.py第二种在 Python Console 中执行py D:/UEProjects/MyProject/PyScripts/CreatePickupBlueprint.py第三种在 UE 编辑器没有启动时直接用命令行带参启动D:/Program Files/Epic Games/UE_5.4/Engine/Binaries/Win64/UnrealEditor.exe D:/UEProjects/MyProject/MyProject.uproject -ExecutePythonScriptD:/UEProjects/MyProject/PyScripts/CreatePickupBlueprint.py运行后Output Log 中会出现“蓝图创建成功/Game/Blueprints/BP_PickupActor”内容浏览器中也能看到这个资产。4.5 批量创建蓝图资产路线 B 的真正价值在于批量。比如一个项目里需要生成 10 个不同名称的拾取物蓝图手动创建很烦但让 Codex 写一个循环脚本就很简单# 文件路径PyScripts/BatchCreatePickups.py import unreal PACKAGE_PATH /Game/Blueprints COUNT 10 def batch_create_pickups(): asset_tools unreal.AssetToolsHelpers.get_asset_tools() factory unreal.BlueprintFactory() factory.set_editor_property(parent_class, unreal.Actor) if not unreal.EditorAssetLibrary.does_directory_exist(PACKAGE_PATH): unreal.EditorAssetLibrary.make_directory(PACKAGE_PATH) for i in range(1, COUNT 1): asset_name fBP_Pickup_{i:02d} asset_path f{PACKAGE_PATH}/{asset_name} if unreal.EditorAssetLibrary.does_asset_exist(asset_path): continue asset asset_tools.create_asset(asset_name, PACKAGE_PATH, unreal.Blueprint, factory) if asset: unreal.EditorAssetLibrary.save_asset(asset_path, only_if_is_dirtyTrue) print(f[OK] {asset_path}) else: print(f[FAIL] {asset_path}) if __name__ __main__: batch_create_pickups()fBP_Pickup_{i:02d}会生成BP_Pickup_01到BP_Pickup_10的命名。先把COUNT改小在测试目录试跑一次确认无误后再跑完整批量这是批量操作最基本的安全习惯。5. 路线三Codex 输出蓝图节点规划人工连线5.1 为什么还需要人工连线路线三最适合快速原型或者当项目里只有策划、美术在做蓝图时。思路很简单让 Codex 以文字形式输出一份蓝图 Event Graph 的节点接线清单然后人照着清单连线。AI 虽然没有直接操作编辑器但能帮我们完成很多“查文档、记节点、想结构”的工作。尤其在纯蓝图项目中这是成本最低的 AI 辅助方式。5.2 基础示例拾取物触发给 Codex 的提示词codex exec 请为 UE5.4 蓝图 Event Graph 写一份节点接线清单。功能角色进入拾取物碰撞范围时打印拾取信息延迟 0.5 秒后销毁自身。要求以节点名为条目标注每个节点要连接的引脚最后补充容易遗漏的设置。Codex 可能输出如下清单1. Event ActorBeginOverlap目标Self 2. Actor Has TagTarget: Other ActorTag: Player→ 分支条件 3. BranchTrue 走继续 4. Print StringIn String拾取成功 5. DelayDuration: 0.5输入为 0.5 6. Destroy ActorTarget: Self 7. 在 Actor Has Tag 的 False 分支可以留空 设置提醒 - ActorBeginOverlap 的 Other Actor 需要判空 - 碰撞盒的 Collision Enabled 设为 Query Only碰撞响应中 Pawn 设为 Overlap - 如果拾取物不需要模拟物理Mesh 组件的 Collision Enabled 设为 NoCollision。然后打开 BP_PickupActor 的 Event Graph按顺序放置节点并连接执行线整个过程几分钟就能完成。清单里连“判空、碰撞设置”这种容易遗漏的细节都提示到了这正是 AI 辅助的价值。5.3 进阶示例IF 和循环蓝图里最常见的逻辑就是 IF 和循环。很多新手会卡在“遍历所有敌人再判断血量”这种组合上其实也可以让 Codex 负责规划。codex exec UE5.4 蓝图 Event Graph 接线清单遍历场景中所有 BP_Enemy依次读取血量如果血量小于 30打印该敌人的名称。要求使用 For Each Loop 和 Branch并给出每个节点的引脚连接说明。可能的输出1. GetAllActorsOfClassActor Class: BP_EnemyWorld Context: Self 2. For Each LoopArray: 上一步结果 3. Get 血量Target: Element即每次循环取出的敌人 4. BranchCondition: 血量 30 5. True → Print String内容拼接Element 的 Display Name 需要治疗 6. False → 空分支即可 注意 - For Each Loop 会自动输出 Element 和 Completed - 判空位置建议放在 Branch 之前防止敌人已被销毁导致读取失败 - 蓝图里拼接字符串要搜索 Append 节点。移动端项目里常见的“双指触摸缩放”“触摸旋转摄像机”这类输入蓝图也可以用同样的方式让 Codex 先输出节点清单再人工落图。思路完全一样AI 做架构师人做连线员。5.4 路线三的局限路线三的问题在于AI 输出的清单可能基于通用蓝图知识不一定符合你项目里已经存在的函数和事件名。所以使用前提是要么项目里没有太多自定义蓝图要么你先在提示词里把已有的接口告诉 Codex比如“项目里有一个蓝图函数 GetPlayerCurrency”“敌人蓝图里暴露了名为 Health 的变量”。如果什么都不说输出往往会偏通用更适合作为思路参考而不是最终实现。6. 常见问题与排查思路6.1 Codex 安装与运行问题问题现象常见原因解决思路codex命令找不到npm 全局目录未加入 PATH执行npm root -g找到目录把 bin 目录加入 PATH安装后启动报权限错误Node.js 版本过旧升级 Node.js 到 18 或更高重新安装codex无法加载组织设置登录态或账号组织配置异常执行codex logout后重新codex login检查账号组织权限6.2 模型相关报错问题现象常见原因解决思路model not supported配置了当前账号不可用的模型名修改~/.codex/config.toml中的model为你账号真实可用的模型使用自定义模型名时提示不支持第三方服务不兼容或模型名拼写错误对照官方文档检查 provider 配置优先使用默认模型跑通流程网络上有人贴出类似“gpt-5.6-sol 这类模型不支持”的报错本质都是模型名和当前 Codex 版本或账号权限不匹配。不要照抄网上的模型名先确认自己的可用列表。6.3 网络层请求失败如果使用 Codex 时遇到codex endpoint /responses请求失败、连接中断等网络层错误通常和本地网络出口、服务端点连通性有关。建议按顺序排查先执行codex exec hi确认基础连通性。检查 API Key 是否有效、是否过期。如果处于企业内网或校园网环境确认当前网络能够正常访问对应服务端点。不要使用任何不符合服务条款的访问方式。必要时查看 Codex 的 verbose 日志具体参数以当前版本codex --help为准。6.4 UE C 编译问题问题现象常见原因解决思路编译报错找不到Components/BoxComponent.h模块依赖缺失检查项目.Build.cs是否包含Engine等模块依赖编译通过但编辑器里看不到 PickupActor热编译没有触发完全关闭编辑器再重新打开创建蓝图时父类列表里找不到 C 类类没有编译成功或编辑器未刷新确认编译成功重启编辑器后再试下面是常见的.Build.cs依赖配置供参考// 文件路径Source/MyProject/MyProject.Build.cs using UnrealBuildTool; public class MyProject : ModuleRules { public MyProject(ReadOnlyTargetRules Target) : base(Target) { PCHUsage PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { Core, CoreUObject, Engine, InputCore }); PrivateDependencyModuleNames.AddRange(new string[] { }); } }6.5 UE Python 脚本问题问题现象常见原因解决思路import unreal失败未启用 Python Editor Script Plugin在 Plugins 里启用插件并重启编辑器py命令无效命令输入位置不对使用 Output Log 底部的命令行输入框或打开 Python Consolecreate_asset返回None同名资产已存在或参数类型不对先删除旧资产确认unreal.Blueprint和 factory 类型匹配批量脚本创建了错误资产路径或命名前缀写错先在测试目录试跑确认无误再扩大范围7. 最佳实践与工程建议7.1 提示词工程给 Codex 的提示词越具体输出越能用。我建议每次提示词都包含以下要素项目路径和引擎版本例如“UE5.4”“项目根目录为 D:/UEProjects/MyProject”。文件路径约定例如“代码放在 Source/MyProject 下”“Python 脚本放在 PyScripts 下”。明确的验收标准例如“编译通过”“能生成 BP_PickupActor 蓝图”。项目风格要求例如“先读取项目中已有代码保持命名风格一致”。安全约束例如“禁止删除已有资产”“禁止修改其他目录”。7.2 代码审查与安全边界AI 生成的代码不能直接合入主分支。尤其是 UE 的 C 代码要重点看几个位置GENERATED_BODY()是否正确、是否在头部最后一行。UPROPERTY和UFUNCTION宏是否完整。构造函数里的CreateDefaultSubobject是否与组件变量对应。碰撞回调里是否做了OtherActor判空。是否可能在客户端和服务端同时触发产生重复逻辑。另外不要为了让 Codex 自动干活就把审批策略改成全自动。UE 项目里一次误操作删除资产可能就是一整天的工作量。保持 Codex 默认的确认机制尤其是涉及删除、覆盖、打包这类敏感操作。7.3 项目结构管理建议把 AI 相关文件统一管理C 类目录Source/MyProject/Gameplay、Source/MyProject/Items等有语义的目录。Python 脚本目录项目根目录下的PyScripts/。AI 生成的临时资产先放在测试目录验证后再移动到正式目录。这样即使 AI 生成了不规范的文件结构你也能快速发现并调整。7.4 蓝图与 C 的分工在“Codex UE5.4”这条路线下我比较推荐的分工是需要序列化、复用、频繁改动接口的逻辑 → C由 Codex 生成。需要策划调参、美术表现的部分 → 蓝图基于 Codex 生成的 C 类做组合和调参。纯蓝图里的复杂节点链 → 先用路线 C 让 Codex 出规划再人工连线。不要让 AI 生成一个几百节点的大蓝图也不要把复杂的玩法逻辑全部塞进蓝图。一个功能在 C 里可能只是几个节点放到纯蓝图里会变成几十个节点维护成本明显更高。7.5 生产环境注意事项如果项目最终要上线使用 AI 生成代码还要额外注意所有 AI 生成的代码必须过一遍 Code Review不能因为测试通过就跳过。涉及多人合作时通过 Git 分支管理 AI 的修改保留完整 diff 记录。不要信任 AI 对“它自己代码”的解释一切以实际行为和性能测试为准。涉及网络请求、用户输入、存档等边界优先手工审查不能依赖 AI 自带的泛化认知。8. 总结与学习路线这篇文章的核心结论其实就一句话Codex 不能直接改.uasset但可以通过 C 反射、Python 编辑器脚本、节点规划三种方式让 AI 真正参与到 UE5.4 蓝图开发中。建议按下面的顺序动手先跑通 Codex 安装、登录和基础的codex exec调用。在 UE5.4 项目里实现路线 A让 Codex 生成一个简单的 Actor 类编译成蓝图。学习unreal模块的几个核心 APIAssetToolsHelpers、BlueprintFactory、EditorAssetLibrary尝试路线 B 的批量创建。在纯蓝图项目里尝试路线 C让 Codex 输出一份节点清单人工连一次线。最后再尝试更复杂的场景比如用 C 暴露接口给蓝图、配置第三方模型服务、结合 CI 做自动化编译。最后分享一个很实用的小技巧在让 Codex 干重活之前先把项目的目录结构和命名规范贴给它。同样一个拾取物有了规范和路径AI 生成的代码能直接编译的概率会高很多。这三条路线里我个人最常用的是路线 A 配合路线 C复杂的玩法接口交给 Codex 写 C临时的原型构思交给 Codex 做节点规划剩下的连线工作再在编辑器里完成。觉得有用的话可以收藏备用等真正在 UE5.4 里跑通后再回来对比一下不同路线的效果。