Lesson 1 / 6
Unity 的最低心智模型
目标不是成为游戏程序员,而是知道 agent 改 Unity 项目时到底可能改坏什么。
一句话模型
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 / Handler | StrangeIoC View / Mediator / Command | HappyMahjong 里先找对应 *Context.cs 的绑定,再追事件到 Command。 |
| 配置文件 | ScriptableObject / Inspector 字段 / JSON | 配置可能被序列化在 `.asset`、`.prefab`、`.unity` 里。 |
| API Client | 项目网络层 | 不要让 agent 绕过已有网络层新写 HttpClient。 |
| 单元测试 | Edit Mode Test | 普通 C# 逻辑优先放这里测。 |
| 集成测试 | Play Mode Test | 涉及 GameObject / Scene / 生命周期时使用。 |
第一条安全原则
代码编译通过不代表 Unity 功能正确。还要回答:
- 这个脚本有没有挂到正确 GameObject 上?
- Inspector 里引用有没有绑定?
- Prefab 或 Scene 有没有被意外重存?
- 异步返回时页面是否还存在?
- Git diff 里有没有 `.unity`、`.prefab`、`.asset`、`.meta`、`Packages`、`ProjectSettings` 的异常变化?
- HappyMahjong 里是否意外改了
AppContext.cs、GameUIView.cs、Assets/Scripts/Base/StrangeIoC/或生成代码?
课堂小练习:把粗糙需求改写成安全任务
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.md 和 Docs/01-flows/startup-flow.md。
Ask the agent: 如果你对 HappyMahjong 的入口不确定,让 agent 只做分析:找
AppMainScene、LoadDll、AppMainRoot、AppContext 和第一条 UI 调用链,先不要改代码。