Lesson 1 / 6

Unity 的最低心智模型

目标不是成为游戏程序员,而是知道 agent 改 Unity 项目时到底可能改坏什么。

建议时长 10–12 min适合产品 + 后台2D only

一句话模型

Unity 项目不是“一个 C# 后端项目加一点图片”。更准确的模型是:

C# 业务代码 + 可视化对象树 + 序列化配置 + 资源文件 + 游戏运行时。

Unity 功能五块拼图

C# 代码View / Command / Service
对象树Scene / GameObject
Inspector序列化字段 / 引用
资源Prefab / 图片 / AB
Runtime生命周期 / 异步

代码只是其中一块。agent 只改 C#,也可能因为 Inspector 引用、Prefab 或生命周期导致功能错误。

后台同学最容易只看 C# 调用链;产品同学最容易只看页面表现。课堂要把两者接起来:一个 2D 页面按钮能不能工作,通常同时取决于代码、Scene / Prefab 里的对象、Inspector 绑定、资源和运行时生命周期。

落到 HappyMahjong

真实项目锚点: 项目路径 /Users/lionqu/Github/NewHappyMahjongClient/HappyMahjongClient;Unity 版本 2021.3.15f1;启动场景 Assets/Scenes/AppMainScene.unity;启动对象 LoadDll;框架 StrangeIoC / MVCS。

课堂只需要记住最小地图:AppMainScene 启动,LoadDll 加载业务,AppMainRoot 创建 AppContext。普通 2D UI 小任务通常只读这条链路,不改它。

HappyMahjong 最小启动地图

AppMainScene启动场景
LoadDll启动 / 热更入口
AppMainRoot业务根对象
AppRootContextView
AppContext大厅主容器

这张图是“地图”,不是“任务范围”。第一批 UI 小任务不应修改这条链。

后台系统到 Unity 的映射

后台概念Unity 近似概念讲课时提醒
应用进程Unity Player运行的是一个实时循环,不是请求来了才执行。
服务启动入口首个 Scene / Bootstrap入口可能藏在 Build Settings 和 Scene 对象里。
Controller / HandlerStrangeIoC View / Mediator / CommandHappyMahjong 里先找对应 *Context.cs 的绑定,再追事件到 Command。
配置文件ScriptableObject / Inspector 字段 / JSON配置可能被序列化在 `.asset`、`.prefab`、`.unity` 里。
API Client项目网络层不要让 agent 绕过已有网络层新写 HttpClient。
单元测试Edit Mode Test普通 C# 逻辑优先放这里测。
集成测试Play Mode Test涉及 GameObject / Scene / 生命周期时使用。

第一条安全原则

代码编译通过不代表 Unity 功能正确。还要回答:

课堂小练习:把粗糙需求改写成安全任务

What — 粗糙需求给 agent 会导致它随便改;安全需求要先分析再改。

Presenter: 给学员 90 秒,用现场选定的功能作为输入,让他们把一句话需求改写成安全 prompt。

粗糙版:

{一句话需求,例如“某个按钮点击后加一个提示”}

期望改写方向:

先不要修改代码。请分析“{需求}”的最小链路:
1. 涉及的 View / Mediator / Command / Service / Model 文件路径
2. 点击事件或触发入口在哪里
3. Context 中 Event → Command 绑定在哪里
4. 最小可能修改文件和不应修改文件
5. 是否涉及 Prefab / Scene / meta
6. 手动验证清单
所有结论必须附带文件路径。不确定处标注“推测”。

Retrieval check

为什么 Unity 中“代码编译通过”仍然可能功能坏掉?

Primary source

课后可以读 Unity 官方 GameObjects 文档,建立“GameObject 是容器,Component 提供功能”的基础模型。项目内优先读 Docs/00-overview/project-overview.mdDocs/01-flows/startup-flow.md

Ask the agent: 如果你对 HappyMahjong 的入口不确定,让 agent 只做分析:找 AppMainSceneLoadDllAppMainRootAppContext 和第一条 UI 调用链,先不要改代码。