TraeAI + UE5:自然语言驱动的横版跳跃游戏开发实战
1. 背景与核心概念最近朋友圈和开发者社区里讨论最热烈的话题就是 AI 对游戏开发流程的冲击。以前我们想做一个横版跳跃游戏哪怕只是原型也要经历场景建模、角色动画、输入系统、碰撞检测、关卡设计这一整套流程少说也要一两周。而现在借助 TraeAI 这类 AI 编程工具配合 UE5 的开放世界编辑器我们完全可以用自然语言对话的方式快速生成一个可玩的“超级玛丽式”平台跳跃游戏。这篇文章就围绕“TraeAI UE5 游戏开发”展开带你从工具安装、工程配置到完整的横版跳跃游戏搭建走一遍真实开发流程。我会把每个核心步骤的原理、代码、运行结果、以及常见坑都讲清楚。无论是刚接触 UE5 的新手还是已经熟悉蓝图的开发者都能从中找到可以直接复用的内容。1.1 什么是 TraeAITraeAI 本质上是一个集成了大语言模型能力的 AI 编程辅助工具。你可以把它理解成一个能理解你意图、能读懂你工程代码、能帮你生成并修改代码的“结对程序员”。它和传统 IDE 插件最大的区别在于它不只是做补全而是可以跨文件分析工程结构理解蓝图的逻辑依赖并按照你的自然语言指令生成完整模块。在游戏开发场景里TraeAI 的价值更加明显。游戏代码往往不是孤立的而是和场景、动画、物理引擎、输入系统强耦合。TraeAI 在一次会话里可以同时看到多个文件能够根据 UE5 的反射机制和蓝图节点结构生成风格一致的 C 代码或蓝图伪代码减少“代码生成了但接不到项目里”的尴尬。1.2 AI 开发游戏解决了什么问题传统 UE5 开发的痛点集中在三个方面一是输入封装繁琐我们需要处理 PlayerController、InputAction、Enhanced Input 的映射关系二是碰撞逻辑很容易出问题角色刚体和胶囊体配置稍有偏差就会出现穿透或者无法触发 Overlap 事件三是代码和蓝图之间的通信不够直观初学者常常被代理、事件分发器、接口绕晕。AI 辅助开发不是要替代你做设计而是把“从零到一”的过程变得极快。比如“帮我创建一个第三人称角色使用 WASD 移动空格跳跃胶囊体碰撞相机跟随”TraeAI 可以在理解 UE5 官方角色类结构的前提下直接生成一个可编译的 C 类并给出挂载到场景的步骤。1.3 为什么选择 UE5 作为 AI 开发的落地引擎UE5 有两大优势。第一是开放性强C 和蓝图双轨制意味着 AI 可以把“文字指令”变成“蓝图节点逻辑描述”也可以生成高效执行的 C 代码第二是内置物理和动画系统非常完善像我们做超级玛丽这类横版跳跃游戏不需要额外引入复杂插件只需要合理使用 Character、Capsule Component、Spring Arm、Camera 就够了。另外 UE5 的 UI 系统 UMG 也是 AI 比较容易生成的部分。比如我们要做一个简单的开始菜单、血条、金币计数都可以通过 TraeAI 快速搭建再手动微调布局即可。2. 环境准备与版本说明在开始实战之前先把环境准备清楚。以下是我本次使用的环境不同版本可能存在差异但核心思路是通用的项目推荐环境操作系统Windows 10/11 或 Ubuntu 20.04引擎UE5.1 及以上推荐 5.3 或 5.4编程语言C通过 IDE 工具链编译构建工具Visual Studio 2022勾选“使用 C 的游戏开发”工作负载AI 工具TraeAI建议安装最新稳定版并保持登录状态显卡驱动保证支持 SM5/DX12或按你的项目配置切换 DX11版本需要根据你的项目实际情况调整。本文示例以 UE5.3 为主但绝大分内容和 5.1、5.4 兼容因为使用的都是引擎级稳定 API。2.1 安装 TraeAITraeAI 的安装步骤不复杂进入 TraeAI 官网或国内可访问的下载入口下载对应操作系统的安装包。安装完成后用支持的账号登录。配置模型端点一般可以选择默认云端模型或本地模型。如果不确定先用云端模型体验最完整。在设置里打开“文件上下文”“自动补全”“内联对话”等功能。安装完成后可以先做一个简单测试打开一个纯文本文件输入“帮我写一个 UE5 C 角色移动组件的基础结构”看它是否能给出合理代码。这样可以提前确认 AI 是否正常响应。2.2 创建 UE5 C 项目我们创建一个“基于 C”的空白项目不勾选“带初学者内容包”方便后续自己控制工程结构。项目命名建议使用英文例如MarioClone避免中文路径和项目名带来的编译问题。在创建项目时UE5 会自动生成.uproject文件Source目录Config目录Content目录建议把项目放在一个简短的本地路径下比如D:/Dev/MarioClone不要放到系统盘用户目录深处否则构建时可能出现路径过长问题。2.3 项目结构规划为了让 TraeAI 更好地理解工程我们提前规划目录结构MarioClone/ |-- Content/ | |-- Characters/ | |-- Levels/ | |-- UI/ | |-- Audio/ | |-- Blueprints/ |-- Source/ | |-- MarioClone/ | |-- Characters/ | |-- Components/ | |-- Player/ | |-- UI/ |-- Config/ |-- MarioClone.uproject有了清晰结构TraeAI 在生成代码时会根据已有的文件路径组织新文件生成后也更方便管理。3. TraeAI 与 UE5 协作的核心原理很多开发者在实际使用 AI 编程工具时会遇到“生成出来的代码编译不过”或者“代码和蓝图对不上”的问题。这通常是因为我们没有理解 AI 工具和 UE5 引擎的协作方式。3.1 自然语言到蓝图逻辑的转换TraeAI 能理解的是“编程语义”而不是“游戏设计文档”。所以当我们说“让角色按住空格时跳得更高”时AI 会把这个需求拆解为在角色类中声明跳跃输入变量。在跳跃函数中读取按键时长。根据按键时长增加跳跃速度。所以你在向 TraeAI 描述需求时尽量使用“技术描述”比如“使用 Enhanced Input创建 Jump Action并在 PlayerController 中绑定到空格键”就比“我想让角色可以跳”更容易生成高质量代码。3.2 代码与蓝图的边界UE5 中C 和蓝图是并存的。TraeAI 生成的 C 类默认会被 UE 反射系统识别但要在场景中使用需要编译 C 类。在 Content Browser 中右键选择“基于该类创建蓝图类”。将该蓝图放置到场景中。AI 无法替你做“拖拽资产”这一步但可以通过输出“你现在需要创建 BP_MarioCharacter并把 GameMode 默认角色设置为该蓝图”这样的指导帮你减少操作盲区。3.3 TraeAI 的上下文记忆能力TraeAI 的上下文窗口决定它能同时“看到”多少代码。在较大 UE5 工程中不要一次性让它生成整个游戏。更好的策略是分模块第一轮生成角色基类定义和移动组件。第二轮生成输入绑定。第三轮生成敌人和金币交互逻辑。第四轮生成 UI 和关卡管理器。这样每一轮 AI 都能聚焦并且更容易基于已有代码分析问题。4. 超级玛丽风格横版跳跃游戏实战下面进入核心环节用 TraeAI 辅助开发一个“超级玛丽风格”的平台跳跃游戏。这个游戏包含以下功能横版角色移动左右移动、转向跳跃短按/长按跳跃高度不同地面、平台、金币的碰撞敌人碰撞受伤简单的 UI 显示分数相机跟随4.1 创建项目与基础配置在开始写代码前先设置项目的 Input打开Project Settings - Input选择“Enhanced Input”创建以下 ActionAction 名称按键IA_MoveA / D 或 左箭头 / 右箭头IA_Jump空格我们不直接使用旧版Axis因为 UE5 官方推荐 Enhanced InputAI 也更容易生成对应代码。4.2 编写角色基类在Source/MarioClone/Characters/MarioCharacter.h中定义角色类// 文件路径Source/MarioClone/Characters/MarioCharacter.h #pragma once #include CoreMinimal.h #include GameFramework/Character.h #include MarioCharacter.generated.h class UCameraComponent; class USpringArmComponent; UCLASS() class MARIOCLONE_API AMarioCharacter : public ACharacter { GENERATED_BODY() public: AMarioCharacter(); protected: virtual void BeginPlay() override; public: virtual void Tick(float DeltaTime) override; virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; // 移动输入 void Move(const struct FInputActionValue Value); // 跳跃 void StartJump(); void StopJump(); // 相机组件 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category Camera) USpringArmComponent* SpringArmComp; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category Camera) UCameraComponent* CameraComp; // 移动速度 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Movement) float MoveSpeed; };在实现文件中MoveCharacter.cpp写入移动和跳跃逻辑。为了简化这里使用 CharacterMovement 的计算// 文件路径Source/MarioClone/Characters/MarioCharacter.cpp #include MarioCharacter.h #include GameFramework/CharacterMovementComponent.h #include GameFramework/SpringArmComponent.h #include Camera/CameraComponent.h #include EnhancedInputComponent.h #include EnhancedInputSubsystems.h #include InputActionValue.h AMarioCharacter::AMarioCharacter() { PrimaryActorTick.bCanEverTick true; SpringArmComp CreateDefaultSubobjectUSpringArmComponent(TEXT(SpringArmComp)); SpringArmComp-SetupAttachment(RootComponent); SpringArmComp-TargetArmLength 400.0f; SpringArmComp-bUsePawnControlRotation false; CameraComp CreateDefaultSubobjectUCameraComponent(TEXT(CameraComp)); CameraComp-SetupAttachment(SpringArmComp, USpringArmComponent::SocketName); CameraComp-bUsePawnControlRotation false; MoveSpeed 600.0f; } void AMarioCharacter::BeginPlay() { Super::BeginPlay(); } void AMarioCharacter::Tick(float DeltaTime) { Super::Tick(DeltaTime); } void AMarioCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); if (UEnhancedInputComponent* EnhancedInput CastUEnhancedInputComponent(PlayerInputComponent)) { // 绑定移动 static const FName MoveActionName TEXT(IA_Move); // 实际项目中应使用资产引用的方式这里演示思路 // EnhancedInput-BindAction(IA_Move, ETriggerEvent::Triggered, this, AMarioCharacter::Move); // EnhancedInput-BindAction(IA_Jump, ETriggerEvent::Started, this, AMarioCharacter::StartJump); // EnhancedInput-BindAction(IA_Jump, ETriggerEvent::Completed, this, AMarioCharacter::StopJump); } } void AMarioCharacter::Move(const FInputActionValue Value) { FVector2D MoveVector Value.GetFVector2D(); AddMovementInput(FVector(1.0f, 0.0f, 0.0f), MoveVector.X * MoveSpeed); } void AMarioCharacter::StartJump() { ACharacter::Jump(); } void AMarioCharacter::StopJump() { ACharacter::StopJumping(); }这里绑定时我没有写死资产路径因为不同项目创建 IA_Move 和 IA_Jump 的路径不同。实际使用中你可以把 InputAction 资产引用暴露为 UPROPERTY然后在蓝图中指定。对于新手来说直接在蓝图中配置输入映射更友好编译项目。右键MarioCharacter创建蓝图BP_MarioCharacter。添加EnhancedInputComponent组件。在蓝图事件图表中添加IA_Move和IA_Jump的绑定节点。4.3 生成金币和平台的交互逻辑我们让 AI 生成一个简单的“金币”类玩家碰到后增加分数并销毁金币。// 文件路径Source/MarioClone/Actors/Coin.h #pragma once #include CoreMinimal.h #include GameFramework/Actor.h #include Coin.generated.h class UBoxComponent; class UStaticMeshComponent; UCLASS() class MARIOCLONE_API ACoin : public AActor { GENERATED_BODY() public: ACoin(); protected: virtual void BeginPlay() override; public: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category Coin) UBoxComponent* CollisionComp; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category Coin) UStaticMeshComponent* MeshComp; UFUNCTION() void OnOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult SweepResult); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Coin) int32 CoinValue; };// 文件路径Source/MarioClone/Actors/Coin.cpp #include Coin.h #include Components/BoxComponent.h #include Components/StaticMeshComponent.h ACoin::ACoin() { PrimaryActorTick.bCanEverTick false; CollisionComp CreateDefaultSubobjectUBoxComponent(TEXT(CollisionComp)); RootComponent CollisionComp; CollisionComp-SetCollisionEnabled(ECollisionEnabled::QueryOnly); CollisionComp-SetCollisionResponseToAllChannels(ECR_Overlap); MeshComp CreateDefaultSubobjectUStaticMeshComponent(TEXT(MeshComp)); MeshComp-SetupAttachment(RootComponent); MeshComp-SetCollisionEnabled(ECollisionEnabled::NoCollision); CoinValue 100; } void ACoin::BeginPlay() { Super::BeginPlay(); if (CollisionComp) { CollisionComp-OnComponentBeginOverlap.AddDynamic(this, ACoin::OnOverlapBegin); } } void ACoin::OnOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult SweepResult) { if (OtherActor OtherActor ! this) { // 在这里实现加分并销毁金币 Destroy(); } }这里要注意碰撞通道必须设置为Overlap否则无法触发事件。这也是很多新手遇到的“为什么碰到金币没有反应”的原因。在场景中放置金币后需要把 MeshComp 关联到一个圆柱体或星星形状的静态网格体。如果没有现成模型可以用 UE5 内置的基础形状。4.4 敌人碰撞与玩家受伤在超级玛丽中敌人通常是从上方踩或侧面碰到受伤。为了方便演示我们只做最简单版玩家碰到敌人时如果碰撞点在敌人上方则敌人销毁否则玩家受伤。我们可以在蓝图里用Get Hit Result的ImpactPoint和ActorLocation比较高度。C 版本可以这样写// 在敌人类的 Overlap 事件中 void AEnemy::OnOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult SweepResult) { AMarioCharacter* Player CastAMarioCharacter(OtherActor); if (Player) { FVector PlayerLocation Player-GetActorLocation(); FVector EnemyLocation GetActorLocation(); if (PlayerLocation.Z EnemyLocation.Z 20.0f) { Destroy(); // 加分逻辑 } else { // 玩家受伤逻辑可调用 CameFromBehind } } }在 UE5 中这种高度判断并不精确但原型验证足够用。真正发布时更推荐使用射线检测或动画事件来判断攻击方向。4.5 相机跟随与关卡搭建相机跟随最简单的方案是使用SpringArmComponent和CameraComponent并把弹簧臂设为固定到角色。我们在角色类中已经添加了这两个组件现在要做的是在蓝图中设置相机方向。为了做出超级玛丽的感觉我们可以让相机保持正侧视角SpringArm 旋转为Pitch 0、Yaw 90或-90这样角色在场景中看起来是横向跑动。关卡搭建步骤如下在 Content Browser 中新建关卡Level_Sample。创建地面在场景中添加一个静态网格体 Cube拉伸为长度 5000厚度 200。创建平台复制多段 Cube设置为不同高度。放置金币从内容浏览器拖入BP_Coin蓝图。放置敌人从内容浏览器拖入BP_Enemy蓝图。把GameMode Override设置为BP_MarioCharacter。为了让关卡更有游戏氛围可以在地面材质里使用一个简单的网格材质或者在关卡中布置背景图片。但这不是本次重点保持简单。4.6 UMG UI 显示分数在游戏中显示金币分数需要一个 UI 控件创建WidgetBlueprint命名为WBP_GameUI。添加一个TextBlock用来显示分数。添加一个TextBlock用来显示生命值。在角色蓝图中每次捡到金币时调用一次事件UpdateScore。在 GameMode 或者 PlayerController 中维护当前分数变量并更新 UI 文本。如果使用 C 实现可以创建一个UMG子类暴露SetScoreText函数// 文件路径Source/MarioClone/UI/GameUIWidget.h #pragma once #include CoreMinimal.h #include Blueprint/UserWidget.h #include GameUIWidget.generated.h class UTextBlock; UCLASS() class MARIOCLONE_API UGameUIWidget : public UUserWidget { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category UI) void UpdateScore(int32 NewScore); protected: UPROPERTY(meta (BindWidget)) UTextBlock* ScoreText; };// 文件路径Source/MarioClone/UI/GameUIWidget.cpp #include GameUIWidget.h #include Components/TextBlock.h void UGameUIWidget::UpdateScore(int32 NewScore) { if (ScoreText) { ScoreText-SetText(FText::AsNumber(NewScore)); } }绑定 Widget 的时候属性名必须和控件面板中的名字一致否则BindWidget会报编译错误。这里是ScoreText你在 UMG 设计器里的 TextBlock 也要命名为ScoreText。4.7 运行与验证最终运行项目时预期效果是角色可以左右移动。空格可以跳跃长按空格跳得更高。碰到平台会停下不会掉落。碰到金币会消失。碰到敌人时如果站在敌人上方敌人消失否则角色回到出生点或扣减生命。屏幕左上角显示分数。如果你发现角色移动时会出现“滑冰感”可以在CharacterMovementComponent中把GroundFriction调高一点或者设置MaxAcceleration和BrakingDecelerationWalking。如果你发现跳跃很轻或者起跳高度不够调节JumpZVelocity和GravityScaleJumpZVelocity 700左右适合一般横版。GravityScale 1.75会更快下落手感更紧凑。5. 常见问题与排查思路这一节整理一下我用 TraeAI 和 UE5 开发时经常遇到的问题以及排查方法。问题现象常见原因解决思路编译时报错 “Unable to compile”项目中存在中文路径或引擎版本与 VS 工具集不匹配检查项目路径是否全英文修复 VS 工作负载并用Generate Project Files重新生成角色无法移动Enhanced Input 资产未正确挂载到 PlayerController或输入动作未触发检查 Blueprint 中是否正确设置 Input Mapping Context并确认IA_Move和IA_Jump已在 UE5 输入配置中启用角色无法跳跃跳跃绑定到了Completed而不是Started导致跳跃触发时机错误将IA_Jump的绑定事件改为Started碰到金币没反应金币碰撞通道没有被设置为 Overlap或者OnComponentBeginOverlap未绑定成功在编辑器中将碰撞预设改为OverlapAll并确保两个 Actor 都在同一 World 中相机跟随很死板SpringArm 的长臂和 Rotation 没设置好调整TargetArmLength并锁定bUsePawnControlRotation和bInheritPitchAI 生成的代码在 UE5 编译器里大量报错生成代码时没有根据当前 UE 版本自动调节 API在提示词中附加“使用 UE5.3 版本的 API”或者让 TraeAI 尝试修复前先把相关头文件列出蓝图复制了 C 变量但无法编辑没有添加UPROPERTY(EditAnywhere)宏在变量声明前加上UPROPERTY(EditAnywhere, BlueprintReadWrite)并重新编译5.1 为什么 TraeAI 生成的代码经常出现版本不匹配这个问题很常见。因为 TraeAI 的语言模型训练数据包含不同时期、不同引擎版本的代码。它可能会生成 UE4 时代的旧 API比如旧版输入系统InputAxis而 UE5 已经默认使用 Enhanced Input。解决办法是在每次对话开始前先让 TraeAI “读取”你项目里的.uproject文件或者某个关键头文件让它自动确认引擎版本再让它在生成代码时标注“基于当前项目引擎版本生成代码”。另外生成后要主动检查关键 API 的版本变化。5.2 为什么蓝图里看不到 C 生成的新类这是一个新手高频问题。生成 C 类后如果 Content Browser 里看不到新类可能有三种情况还未编译需要在 IDE 或 Rider 中先编译成功。未重新启动编辑器需要关闭编辑器后再打开。右键新建蓝图时选择的是 “All Classes”但新类没有出现在列表里原因是类头文件没有正确的#include或生成宏缺失。针对第三种情况检查类的头文件中是否包含#include MarioCharacter.generated.h并且必须在UCLASS()宏之后写类定义。缺失GENERATED_BODY()是很多 C 类无法被反射识别的根因。5.3 为什么 AI 生成的代码逻辑正确但游戏手感不对手感问题通常不是代码逻辑问题而是数值参数问题。比如JumpZVelocity是跳跃初始速度AirControl是空中的水平控制力GravityScale是重力倍率。这三个参数直接决定“跳跃是否跟手”。建议先记录下来在蓝图中实时调参JumpZVelocity 600 GravityScale 1.75 AirControl 0.8 BrakingDecelerationWalking 2000不同游戏手感差别很大超级玛丽偏轻快所以跳跃要高、下落要快魂类游戏则要更沉重。这些参数要在真实运行中反复试。6. 最佳实践与工程建议当 AI 能帮你快速生成大量代码后工程管理变得更加重要。以下几条建议来自实际项目经验希望能帮你少踩坑。6.1 把 AI 当成结对开发者而不是代码生成器每次让 AI 改代码不要只说“帮我修复”。尽量提供当前错误信息。相关代码文件内容。你期望的行为。你尝试过但失败的方案。这样 AI 的修改才更准确。比如我在 UE5.3 中编译以下角色移动代码时出现错误 C2065: IA_Move 未声明头文件已经包含 EnhancedInputComponent.h。请检查可能是项目配置的问题并提供修复方法。这种提问方式比“帮我修一下”有效得多。6.2 版本控制与回滚AI 生成的代码也会引入回归问题。建议从第一天就使用 Git并在每次 AI 大改之前提交当前稳定版本。让 AI 修改。编译运行。如果效果不佳直接回滚到上一个提交。在 UE5 中.uproject、Source、Config都是文本文件Git 能很好处理但Content目录中的.uasset是二进制格式Git 冲突比较难解决。所以尽量不要多人同时修改同一个关卡或蓝图或者在团队中用 Perforce 会更合适。6.3 提示词工程与模块拆分写提示词时尽量把需求拆细。比如“帮我写一个可以旋转的平台”不如“帮我创建一个 Actor 类基于 StaticMeshComponent 旋转旋转速度 90 度每秒在 BeginPlay 中随机初始方向”有效。模块拆分的经验值是角色移动一个模块。输入绑定一个模块。交互道具一个模块。UI 更新一个模块。敌人 AI 一个模块。每个模块控制在 100 到 300 行以内这样 AI 和维护者不会失去控制。6.4 安全边界与代码审查使用 AI 生成代码时要特别注意它是否引入了不必要的网络访问、文件写入或外部库依赖。在游戏开发中有些库在特定平台上是无法通过的比如 Steam 平台的某些集成插件。如果 AI 推荐了第三方插件先查一下授权和生产环境兼容性再决定是否引入。尽量避免引入不是必需的动态库特别是本地生成的代码里出现LoadLibrary或dlopen这类调用时要仔细审查。6.5 性能优化注意事项如果能面试或者上线AI 生成的代码往往不是性能最优解。几个常见问题在 Tick 中频繁创建对象。使用Delay和Retriggerable Delay代替状态机。对几千个可交互对象都绑定 Overlap 事件。使用高精度碰撞检测替代射线检测。在发布前建议用 UE5 的性能分析工具Unreal Insights检查每一帧的开销。7. 总结与学习路线本文从 AI 开发游戏的行业背景讲起介绍了 TraeAI 和 UE5 配合的核心原理并完整演示了一个“超级玛丽风格”横版跳跃游戏的开发流程创建项目、编写角色移动、配置输入、搭建关卡、实现金币和敌人交互、显示 UI 分数。通过这个项目你可以掌握的是TraeAI 的基本使用方式以及让 AI 更“懂” UE5 工程的方法。UE5 Enhanced Input 系统的绑定流程。Character 类中移动、跳跃、相机跟随的核心组件设置。C 与蓝图协作的基本边界。如何处理常见的碰撞、输入、UI 更新问题。如果你对 AI 开发游戏感兴趣下一步可以尝试以下方向使用 AI 生成一个简单的敌人 AI比如巡逻、追击、反击。使用 AI 辅助实现动画重定向让不同骨骼模型的动画能复用到同一个角色身上。结合本地大模型部署把 AI 工具做成私有化服务避免代码发送到第三方云。最后想说的是AI 并不会让游戏开发变成“零门槛”但它确实把原型阶段的效率提升了数倍。建议你不用一上来就追求“全 AI 接管”而是把 TraeAI 当作一个强力辅助先从一个小关卡开始感受它生成代码、分析报错、重构模块的能力再逐步加大 AI 在项目中的参与度。只有当你理解了每个模块的职责AI 的产出才能真正被你掌控。