拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI辅助UE5游戏开发:用Trae实现超级玛丽横版跳跃Demo

AI辅助UE5游戏开发:用Trae实现超级玛丽横版跳跃Demo 最近社区里经常能看到类似“游戏开发行业大变天”“AI 能开发游戏了”的说法。实际体验下来AI 编程工具确实把很多重复性劳动压缩了一大截尤其是配合 UE5 这种功能庞大、节点繁多的引擎时用 AI 先生成初版逻辑再手工调整参数和结构效率和之前完全不是一个量级。这篇文章就以“超级玛丽风格横版跳跃游戏”为例子完整演示一条从环境准备、AI 提示词设计、C / 蓝图落地到运行验证与排错的闭环流程。无论你是刚接触 UE5 的新手还是已经在业务项目中摸爬滚打的开发者都可以把本文当作一份“AI UE5 工作流入门手册”来用。1. AI 辅助游戏开发背景与核心概念先说清楚一个事实AI 并不是真正“替你做出一款游戏”它更多是把你脑子里的需求快速翻译成 UE5 能理解的代码、蓝图节点结构、配置参数和资产组织方式。理解这一点后面使用起来才不会失望。1.1 传统游戏开发流程的痛点UE5 是一款学习曲线非常陡峭的引擎。哪怕只是做一个“角色可以左右移动、按空格跳跃”的横版 Demo也需要同时处理输入映射、角色移动组件、物理碰撞、摄像机跟随、动画蓝图、关卡蓝图等一大堆系统。专业引擎开发者尚且要查文档新手更是一步一个坑。更麻烦的是游戏开发中大量工作存在明显的“样板化”特征。比如顶层视角的玩家控制器逻辑角色移动速度和跳跃力参数金币、钥匙、道具的收集逻辑简单敌人巡逻的移动逻辑UI 中分数和生命值的增减这些逻辑在业务上很相似但每个项目的命名、资产路径、参数需求又不一样。过去写一个功能要先搜索资料、看示例工程、复制代码、再改参数整体节奏很慢。而 AI 编程工具擅长的事情恰恰就是这种“根据清晰需求快速生成初版实现”的场景。1.2 AI 编程工具如何改变工作流AI 编程工具的核心能力不只是“自动补全代码”而是可以做到理解整个项目的文件结构和已有代码风格根据自然语言描述生成 C 代码、配置项、蓝图节点说明对已有代码做重构、注释、排错生成需要人工落地的施工文档比如“在蓝图中依次创建哪些节点”假设你要实现“角色只有落地以后才能再次跳跃”传统做法需要打开角色蓝图、找到跳跃相关逻辑、判断 character movement 的 IsMovingOnGround 节点、再连分支。现在可以把需求直接描述给 AI让它输出两种方案纯蓝图节点连接说明或者 C 实现代码。拿到初版之后你只需要在引擎里落地、验证参数把踩坑时间集中到“调手感”上。当然也要强调AI 目前还无法替你完成美术设计、场景氛围、玩法策划和数值手感。一个游戏好不好玩终究需要人来判断。1.3 Trae AI 在 UE5 开发中的定位Trae AI 是一款 AI 原生的集成开发环境界面和操作习惯与 VS Code 比较接近内置对话式 AI 能力可以直接读取你打开的 UE5 项目目录。它在 UE5 开发中的定位可以理解为“顾问 初版代码生成器”帮你梳理蓝图结构减少反复搜索节点的成本生成 C 角色类、组件逻辑、编辑器工具脚本解释 UE5 中的报错日志和蓝图编译错误通过 MCP 这类扩展协议与 UE5 编辑器做更深度的交互需要注意的是Trae AI 的模型能力和支持情况会随版本更新变化部分功能可能需要联网、登录或配置模型服务。本文示例以“AI 生成代码和蓝图节点说明 手工落地到 UE5”为主线因为这是最稳定、最通用、最容易复现的方式。2. 环境准备与版本说明在开始写代码之前先把工具链梳理清楚。UE5 的工程结构比较特殊如果项目创建阶段选错了模板后面 AI 生成的代码会出现大量模块名不匹配的问题。2.1 安装 UE5 并创建测试项目本文示例以 UE5.x 环境为主当前常见版本有 5.1、5.2、5.3、5.4。不同小版本之间部分菜单名称和默认设置会有差异但核心 API 和蓝图节点基本一致。创建项目的步骤打开 Epic Games Launcher在“虚幻引擎”标签页安装需要的 UE5 版本。启动引擎在项目浏览器中选择“游戏”分类。选择“空白模板”或者“第三人称模板”是否包含初学者内容包都可以。项目类型建议选择“C”这样 AI 可以直接帮助生成玩家角色类后续再通过蓝图层做继承和参数调整。如果你选择的是蓝图项目也不影响整个流程只是文章中的 C 部分需要改成“蓝图节点实现”。2.2 安装并初始化 Trae AITrae AI 目前提供桌面版客户端下载安装后直接用本地文件夹方式打开 UE5 项目目录即可。打开项目后建议先做两件事确认对话模型中具备代码生成能力。不同版本的可选模型不同以你安装版本的实际列表为准。在项目中新建一个rules/目录存放 AI 规则文件。很多 AI IDE 都支持把常用约束写进项目规则让每次对话都自动带上这些上下文。例如可以在项目根目录创建一个rules/game-dev.md文件内容可以参考# UE5 开发约束 - 项目基于 UE5.x使用 C 和蓝图混合开发。 - C 类命名必须使用项目模块前缀例如 AMarioCharacter。 - 蓝图资产命名必须使用 BP_ 前缀。 - 输入系统优先使用 Enhanced Input。 - 生成代码时必须包含头文件引用和模块依赖说明。 - 如果方案涉及蓝图节点请输出节点连接顺序说明。这样 AI 在回答问题时会优先遵守项目规则而不是凭空生成一套与项目风格不符的代码。2.3 示例项目结构规划为了减少 AI 生成的代码与项目实际情况冲突建议一开始就规划好目录结构MarioDemo/ ├── Content/ │ ├── Blueprints/ │ │ ├── BP_MarioPlayer.uasset │ │ ├── BP_Coin.uasset │ │ └── BP_Goomba.uasset │ ├── Input/ │ │ ├── IA_Move.uasset │ │ ├── IA_Jump.uasset │ │ └── IMC_Mario.uasset │ └── Maps/ │ └── DemoMap.umap ├── Source/ │ └── MarioDemo/ │ ├── MarioCharacter.h │ ├── MarioCharacter.cpp │ └── MarioDemo.Build.cs清晰的目录结构能帮助 AI 更好理解项目规模也方便你后续维护。3. 核心原理AI 如何“听懂” UE5 项目很多人使用 AI 写 UE5 代码时效果不好根本原因不是 AI 不够聪明而是“喂给 AI 的信息上下文不够”。这一节重点讲清楚 AI 到底是怎么理解 UE5 项目的以及提示词该怎么写。3.1 AI 理解代码与蓝图的原理AI 编程工具主要通过文本上下文理解项目。C 代码、配置文件、目录结构、你的文字描述它都能读取和分析。但蓝图不是纯文本资产AI 很难直接读取.uasset文件里的节点连线数据。所以当前最可靠的两种做法是让 AI 生成 C 代码编译后在蓝图中继承使用。让 AI 输出蓝图节点搭建说明配合图片或文字描述你手动在蓝图编辑器里连线。如果项目里安装了带 MCP 服务的 UE5 桥接插件AI 也可以通过工具接口读取编辑器中的 Actor 列表、资产列表甚至创建节点。但这类能力依赖外部插件配置成本偏高稳定性也受插件版本影响。3.2 MCP 协议与编辑器交互MCP 全称 Model Context Protocol可以理解为“AI 模型的外部工具扩展协议”。通过 MCPAI 可以在对话中调用外部工具比如读取数据库、操作浏览器、调用命令行甚至连接游戏编辑器。在 UE5 场景里社区已经出现了一些把 UE5 编辑器接入 MCP 的桥接方案。常见思路是在 UE5 编辑器中运行一个本地服务插件该插件暴露一组工具例如“获取当前关卡 Actor 列表”“创建蓝图节点”“执行控制台命令”在 Trae AI 的 MCP 配置中添加该服务的地址和参数重启 Trae AI 后对话模型就能调用这些工具配置大体思路如下{ mcpServers: { ue5-bridge: { command: node, args: [path/to/server.js], env: {} } } }由于不同插件实现方式完全不同具体安装步骤要看对应插件的文档。如果你只是想先跑通一个小 Demo不依赖 MCP 也完全没有问题。3.3 提示词工程的基础写法要让 AI 输出可落地的 UE5 内容提示词至少要包含以下几个要素技术栈UE5、蓝图还是 C功能目标角色移动、跳跃、金币收集输入输出输入方式、返回值、输出形式约束条件命名规则、不支持的功能、性能要求示例参考如果有明确的参考实现可以贴给 AI推荐使用“角色-任务-约束-输出格式”的结构。例如你是 UE5 技术专家。 任务实现一个横版平台跳跃玩家的角色移动逻辑使用 C。 约束 - 使用 Enhanced Input 系统。 - 玩家按 A/D 左右移动空格跳跃。 - 最大移动速度 600跳跃初始速度 500。 - 移动时使用 AddMovementInput。 输出格式 - 先列出需要的模块和头文件 - 再给出 MarioCharacter.h / MarioCharacter.cpp 完整代码 - 最后说明如何在蓝图里绑定输入资产这种提示词让 AI 有明确的上下文生成结果通常比“帮我写个超级玛丽”可靠很多。3.4 常见误区AI 不是万能的AI 在生成 UE5 代码时最容易出现以下几类幻觉把不同 UE 版本的 API 混在一起。虚构不存在的节点名称或参数。忽略项目模块名和 Build.cs 依赖。生成的代码逻辑正确但完全没考虑性能例如每帧创建对象。因此AI 生成的代码必须经过编译验证和运行验证。一个比较稳妥的工作流是先让 AI 输出方案再输出代码不要边写边改。4. 实战用 Trae AI 做一个超级玛丽风格 Demo下面进入全文最核心的环节用 Trae AI 完成一个最小可玩的“类超级玛丽”横版跳跃游戏 Demo。功能范围控制在玩家角色左右移动、跳跃重力环境和地面碰撞金币收集增加分数一个来回巡逻的敌人玩家碰到敌人后回到起点4.1 需求拆分与提示词设计在写任何代码之前先把功能拆成独立模块模块需求说明实现方式玩家角色横版移动、跳跃、落地检测C 类 蓝图继承输入系统移动和跳跃按键增强输入资产 蓝图绑定金币碰撞后加分并销毁蓝图 Overlap 事件敌人两点之间来回移动蓝图 Tick 移动关卡平台、出生点、金币摆放关卡编辑器手动搭建拆分完成后可以先把整个需求一次性告诉 Trae AI让它输出一个实现计划再按照计划逐模块生成代码。提示词参考项目UE5 横版跳跃游戏 Demo风格类似超级玛丽。 请先输出实现计划 1. 创建玩家 C 角色的要点 2. 增强输入资产创建方式 3. 金币收集蓝图的节点思路 4. 简单巡逻敌人的蓝图思路 5. 关卡搭建的步骤 不用写代码先给方案。拿到计划后再针对每个模块单独提问避免一次对话中塞入过多信息导致 AI 生成混乱。4.2 生成玩家角色 C 核心逻辑在 Trae AI 中打开项目根目录直接提出代码生成需求在 Source/MarioDemo 目录下创建 AMarioCharacter 类继承 ACharacter。 使用增强输入系统支持左右移动和跳跃。 移动使用 AddMovementInput(FVector(1,0,0), InputValue.X)。 跳跃绑定到 Jump 和 StopJumping。 MaxWalkSpeed 设为 600JumpZVelocity 设为 500AirControl 设为 0.8。 头文件和 cpp 都生成完整可编译版本。AI 输出的代码思路类似下面这样你需要根据实际项目把MARIODEMO_API宏替换成你自己的模块宏。文件路径Source/MarioDemo/MarioCharacter.h#pragma once #include CoreMinimal.h #include GameFramework/Character.h #include InputActionValue.h #include MarioCharacter.generated.h class UInputMappingContext; class UInputAction; UCLASS() class MARIODEMO_API AMarioCharacter : public ACharacter { GENERATED_BODY() public: AMarioCharacter(); protected: virtual void BeginPlay() override; virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override; void Move(const FInputActionValue Value); void StartJump(); void StopJump(); UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input) UInputMappingContext* DefaultMappingContext; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input) UInputAction* MoveAction; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input) UInputAction* JumpAction; };文件路径Source/MarioDemo/MarioCharacter.cpp#include MarioCharacter.h #include EnhancedInputComponent.h #include EnhancedInputSubsystems.h #include GameFramework/CharacterMovementComponent.h #include InputMappingContext.h AMarioCharacter::AMarioCharacter() { PrimaryActorTick.bCanEverTick true; GetCharacterMovement()-MaxWalkSpeed 600.0f; GetCharacterMovement()-JumpZVelocity 500.0f; GetCharacterMovement()-AirControl 0.8f; } void AMarioCharacter::BeginPlay() { Super::BeginPlay(); } void AMarioCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); if (UEnhancedInputComponent* EIC CastUEnhancedInputComponent(PlayerInputComponent)) { EIC-BindAction(MoveAction, ETriggerEvent::Triggered, this, AMarioCharacter::Move); EIC-BindAction(JumpAction, ETriggerEvent::Started, this, AMarioCharacter::StartJump); EIC-BindAction(JumpAction, ETriggerEvent::Completed, this, AMarioCharacter::StopJump); } } void AMarioCharacter::Move(const FInputActionValue Value) { FVector2D MoveInput Value.GetFVector2D(); AddMovementInput(FVector(1.0f, 0.0f, 0.0f), MoveInput.X); } void AMarioCharacter::StartJump() { Jump(); } void AMarioCharacter::StopJump() { StopJumping(); }这里要注意几点MARIODEMO_API由项目模块名决定不能直接照抄。代码引用了EnhancedInput模块需要修改MarioDemo.Build.cs。GetCharacterMovement()返回角色移动组件最大速度和跳跃高度都通过它设置。文件路径Source/MarioDemo/MarioDemo.Build.csusing UnrealBuildTool; public class MarioDemo : ModuleRules { public MarioDemo(ReadOnlyTargetRules Target) : base(Target) { PCHUsage PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { Core, CoreUObject, Engine, InputCore, EnhancedInput }); PrivateDependencyModuleNames.AddRange(new string[] { }); } }4.3 落地为蓝图并绑定输入资产C 代码编写完成后进入 UE5 编辑器完成资产创建和蓝图绑定。编译项目。在 Trae AI 外部用 IDE 编译代码或者直接用 UE5 编辑器打开项目等待自动编译。在内容浏览器中创建输入资产右键输入-输入动作分别创建IA_Move和IA_Jump。打开IA_Move添加Boolean或Axis2D类型的值再设置对应的按键映射。创建输入映射上下文资产IMC_Mario把IA_Move和IA_Jump添加进去。右键创建蓝图类父类选择MarioCharacter命名为BP_MarioPlayer。在蓝图细节面板中把DefaultMappingContext、MoveAction、JumpAction分别指向刚才创建的资产。输入映射上下文通常还需要在玩家控制器的BeginPlay中添加。如果使用增强输入子系统需要在玩家控制器或角色BeginPlay中完成映射上下文的添加逻辑。如果你觉得 C 比较麻烦这一步可以直接在角色蓝图的事件 BeginPlay 节点中调用相关函数具体节点名称在不同版本中略有差异。4.4 生成金币和敌人蓝图逻辑金币收集是比较典型的 Overlap 逻辑。可以继续让 Trae AI 输出蓝图搭建说明在 UE5 蓝图中实现金币收集逻辑 - Actor 蓝图 BP_Coin - 根组件为 StaticMeshComponent - 附带 SphereComponent 作为碰撞体 - 使用 Event ActorBeginOverlap - 如果 overlapping actor 是玩家角色则播放声音、增加分数、销毁自身 输出节点连接顺序。AI 输出的大体节点顺序如下创建BP_Coin继承 Actor。添加StaticMeshComponent作为根组件设置金币 Mesh。添加SphereComponent调整半径开启碰撞。在事件图表中添加Event ActorBeginOverlap。从 Other Actor 引脚引出Cast To BP_MarioPlayer。成功分支后调用某个全局游戏状态变量增加分数。调用Destroy Actor销毁金币。敌人巡逻逻辑最简方案是在 Tick 中改变位置不涉及行为树。用蓝图实现一个简单巡逻敌人 BP_Goomba - 有一个静态网格体作为视觉表现 - 在 Tick 中沿 X 轴移动 - 速度可变 - 超过左右边界后反向 - 玩家碰到后玩家回到起点节点思路在蓝图 Tick 事件中调用AddActorWorldOffset。偏移量设置为Direction * Speed * DeltaTime。检测当前 X 坐标是否大于右边界或小于左边界如果超出则Direction * -1。再叠加Event ActorBeginOverlap判断 Other Actor 是否为玩家如果是则重置玩家位置到出生点。这种实现方式足够教学 Demo 使用。如果要做大规模敌人建议改用 UE5 的行为树和 AI Controller性能和组织方式会好很多。4.5 搭建关卡并运行验证在内容浏览器中创建新地图DemoMap然后在关卡中放置一个地面静态网格体作为主要平台若干金币排列成一行或弧线一个玩家出生点放置BP_MarioPlayer一个巡逻敌人放置在平台中间关卡搭建完成后点击“运行”。预期表现按 A / D 可以左右移动按空格可以跳跃落地后才能再次起跳穿过金币时金币销毁分数增加碰到敌人时玩家回到出生点血量或次数减少如果发现手感不合适可以去角色类 C 代码中调整MaxWalkSpeed、JumpZVelocity和AirControl也可以直接在蓝图细节面板覆盖参数不需要重新生成代码。5. 常见问题与排查思路AI 辅助开发过程中报错和逻辑异常几乎一定会出现。下面几个是最高频的场景。问题现象常见原因解决思路C 编译失败头文件缺失或模块依赖不足检查 Build.cs 是否引入 EnhancedInput 等模块蓝图无法显示 AI 要求的节点AI 混用了旧版节点名让 AI 明确注明 UE5 版本重新生成Overlap 事件不触发碰撞预设或碰撞响应设置错误检查两个 Actor 的碰撞预设、Generate Overlap Events跳跃手感非常飘空气控制值过高或重力过低降低 AirControl调整 JumpZVelocity中文注释乱码文件编码不是 UTF-8 或编辑器编码不匹配统一使用 UTF-8 保存文件MCP 工具连接失败服务未启动或端口不正确检查本地服务地址、端口和日志5.1 AI 生成的蓝图逻辑连不对怎么办很多 AI 输出的蓝图节点连接说明是基于纯逻辑推导的并没有实际在编辑器中对照版本。遇到节点名对不上时最好的做法不是反复追问 AI而是把当前 UE5 版本告诉 AI。让 AI 改用“文字描述逻辑”而不是具体节点名。自己在蓝图中用搜索框输入功能关键词比如 “Overlap”“Cast”“DestroyActor”。蓝图的搜索框非常强大很多节点即使名称不同也可以通过功能关键词找到相似实现。5.2 碰撞检测不触发碰撞问题最常见的原因是“碰撞预设不匹配”。在 UE5 中一个 Actor 能否触发 Overlap取决于双方的碰撞响应。排查顺序如下检查两个 Actor 是否都启用了碰撞。检查Collision Presets是否为OverlapAll或至少一方为Overlap。检查Generate Overlap Events是否勾选。检查是否同时使用了多个碰撞体导致触发的是不正确的那一个。如果是 AI 生成的蓝图还需要确认 SphereComponent 是否真正设置为根组件并且可见碰撞配置没有被静态网格组件覆盖。5.3 C 编译报错AI 生成 C 代码时最常见的报错来自头文件导入和模块依赖。例如使用增强输入系统时需要同时引入#include EnhancedInputComponent.h #include EnhancedInputSubsystems.h同时在Build.cs中加入模块EnhancedInput如果MARIODEMO_API没用项目模块名替换也会出现生成宏不匹配的编译错误。遇到这类问题把完整报错信息粘贴给 AI让它根据报错修正代码通常比手动排查更快。5.4 MCP 连接失败如果你配置了 UE5 与 Trae AI 的 MCP 桥接连接失败时先确认本地 MCP 服务进程是否启动端口是否被占用Trae AI 的 MCP 配置中 URL 是否与插件输出一致重启 Trae AI 是否重新加载了 MCP 服务列表MCP 属于增强功能不稳定时不要影响主流程。回到“AI 生成 手工落地”模式一样能完成项目开发。6. 最佳实践与工程建议AI 在游戏开发中发挥的作用越来越明显但不代表我们可以放弃工程规范。下面这些建议来自实际项目经验能帮你减少返工。6.1 提示词仓库化管理不要把提示词写一次就丢掉。建议在项目根目录建立prompts/文件夹把常用需求模板保存下来prompts/ ├── player-controller.md ├── pick-up-item.md ├── enemy-patrol.md ├── anim-retarget.md └── debug-fix.md这样每次会话开始可以直接让 Trae AI 阅读对应提示词文件再根据当前需求做变体调整减少重复描述。6.2 小步验证原则不要一次性让 AI 生成一个完整游戏的所有逻辑。更好的方式是先让角色能移动验证移动没问题后再让 AI 增加跳跃跳跃验证通过后再多做金币、敌人、UI每一次增加的功能都应该在引擎中实际跑通再进入下一步。这样可以准确判断问题出在 AI 生成逻辑还是自己的操作步骤。6.3 AI 生成代码的审查要点AI 生成的代码需要人工审查重点看三个方面模块依赖是否齐全是否有明显的性能问题比如每帧创建对象是否有越权操作比如直接修改全局配置、乱写文件在涉及项目配置、文件删除、资产批量修改等操作时必须先备份或者在测试副本中验证。对 C 代码尤其要注意内存管理、指针判空和异步回调问题。6.4 版本控制与备份UE5 项目中的蓝图资产是二进制文件合并冲突很痛苦。建议在项目初期就接入 Git并且约定C 代码和配置文件正常提交蓝图资产用二进制方式提交确认锁定AI 修改项目规则和配置前先创建分支这样就算 AI 生成的代码跑出严重问题也可以安全回滚。6.5 性能与可维护性游戏开发中最大的性能风险往往不是面数而是逻辑设计尽量用事件驱动替代 Tick周期性逻辑优先用 TimerAI 误用循环创建新对象时优先改为水池复用或缓存大世界场景考虑使用 Level StreamingAI 生成的示例代码常常为了简单把所有移动都放到 Tick 中。学习项目没问题但正式项目要结合 UE5 的帧率要求和对象数量判断是否合理。6.6 素材与版权边界用 AI 做超级玛丽风格 Demo 用于学习没有问题但如果你要公开分享、发布到商业平台或申请软件著作权就必须注意素材版权问题不要直接使用别人的游戏角色、音乐、音效、地图素材涉及原创美术风格时尽量用可商用素材库如果使用 AI 生成美术资源同样要确认对应平台的使用授权技术文章里的“超级玛丽”更多是玩法代称实际项目建议设计自己的角色和世界观避免法律风险。7. 总结与下一步学习路线通过本文的完整流程你已经掌握了用 Trae AI 辅助 UE5 开发的基本工作流如何设计结构化的游戏开发提示词如何创建包含增强输入的角色 C 类如何用蓝图实现金币收集和敌人巡逻如何排查输入、碰撞、编译等高频问题下一步可以继续往这些方向深入动画重定向给 AI 生成的角色模型绑定 UE5 骨骼动画让超级玛丽式角色拥有真正的跑步、跳跃动画多播委托与事件分发让金币、敌人、玩家之间通过事件解耦行为树替换 Tick 巡逻敌人让敌人拥有更智能的状态切换存档系统记录金币、关卡进度和玩家设置关卡设计使用 UE5 的建模工具或第三方资源包搭建更多“平台跳跃”场景如果只是按这篇文章操作一遍你会发现 AI 真正节省的时间其实是在“翻译需求”和“搭建初版框架”的阶段。而真正让游戏变好玩的仍然是你对跳跃手感、节奏和规则设计的判断。建议你从一个小场景开始先做出一个能跑通的最小 Demo再逐步加入动画、音效、UI 和关卡机制在实践里体会 AI 与人工协作的边界。
返回列表