--- title: "Unity Architect" type: source tags: [] date: 2026-04-26 --- ## Source File - [[raw/Agent/agency-agents/game-development/unity/unity-architect.md]] ## Summary(用中文描述) - 核心主题:Unity 游戏架构师 AI Agent 人格规范,专注于数据驱动、ScriptableObject(SO)优先的模块化可扩展架构 - 问题域:如何构建避免"意大利面条式代码"的 Unity 项目,消除硬引用、单例滥用、God MonoBehaviour 等反模式 - 方法/机制:ScriptableObject 事件通道(GameEvent)、RuntimeSet 无单例实体追踪、单一职责组件拆分、Inspector SO 引用连线、Custom PropertyDrawer 设计师赋能、Addressables 资源管理、Unity DOTS/ECS 混合架构 - 结论/价值:通过 SO-first 设计,Unity 项目实现零 GameObject.Find()、每个 MonoBehaviour < 150 行、Prefab 场景无关自包含、设计师无需代码即可创建游戏变量/事件/运行时集合 ## Key Claims(用中文描述) - ScriptableObject-First 设计:所有共享游戏数据必须存于 ScriptableObject,绝不通过 MonoBehaviour 字段跨场景传递 - GameEvent 事件通道:跨系统通信禁止使用 GetComponent<> 或单例,必须通过 SO 事件通道连线 - RuntimeSet 无单例追踪:全局实体追踪使用 RuntimeSet : ScriptableObject 而非静态单例 - 单一职责强制:每个 MonoBehaviour 只解决一个问题,若能用"and"描述则必须拆分 - 反模式零容忍:God MonoBehaviour(500+ 行)、DontDestroyOnLoad 单例滥用、Update 内轮询逻辑均为禁止项 - Unity DOTS 混合架构:性能关键系统迁移至 Entities(ECS),编辑器友好型游戏逻辑保留 MonoBehaviour ## Key Quotes > "Every MonoBehaviour solves one problem only — if you can describe a component with 'and,' split it." — 单一职责原则核心表述 > "Treat every scene load as a clean slate — no transient data should survive scene transitions unless explicitly persisted via SO assets." — 场景卫生核心原则 > "Designer-accessible: Non-technical team members can create new game variables, events, and runtime sets without touching code." — 设计师赋能核心价值 ## Key Concepts - [[ScriptableObject]]:Unity 资产形式的可序列化对象,用于存储共享数据、事件通道、运行时集合 - [[RuntimeSet]]:继承 ScriptableObject 的泛型集合类型,用于全局追踪活跃实体而不依赖单例 - [[GameEvent]]:SO 形式的事件通道(GameEvent : ScriptableObject),用于跨系统解耦通信 - [[SingleResponsibilityPrinciple]]:每个 MonoBehaviour 只负责单一职责,超过 150 行即违反 - [[EventDrivenArchitecture]]:事件驱动替代 Update() 内轮询,消除 GC 分配 - [[DataDrivenDesign]]:数据驱动的模块化 Unity 架构设计理念 - [[ScriptableObjectEventChannel]]:ScriptableObject 形式的 GameEvent 系统,通过 Raise/Register 模式实现松耦合 - [[Addressables]]:Unity 资源管理系统,替代 Resources.Load(),支持细粒度内存控制和 DLC - [[UnityDOTS]]:Data-Oriented Tech Stack,ECS + Job System + Burst Compiler,用于性能关键路径 - [[EditorUtilitySetDirty]]:编辑器脚本修改 SO 数据后必须调用以确保序列化持久化 ## Key Entities - [[UnityArchitect]]:本文档定义的 AI Agent 人格,数据驱动模块化架构专家,精通 ScriptableObject、职责拆分、单例消除 - [[UnityEditor]]:Unity 编辑器环境,ScriptableObject 通过 [CreateAssetMenu] 对设计师可见 - [[UnityDOTS]]:Unity Data-Oriented Tech Stack(Entities、Jobs、Burst),用于 CPU 密集型批量操作 ## Connections - [[UnityArchitect]] ← builds_with ← [[ScriptableObject]] - [[UnityArchitect]] ← extends ← [[UnityMultiplayerEngineer]](网络层叠加 SO 架构) - [[UnityArchitect]] ← complements ← [[UnityShaderGraphArtist]](SO 数据驱动视觉资产) - [[UnityArchitect]] ← complements ← [[UnityEditorToolDeveloper]](Custom PropertyDrawer 赋能 SO 设计师体验) - [[UnityArchitect]] ← builds_with ← [[UnityDOTS]](性能关键路径使用 ECS 混合架构) ## Contradictions - 与 [[UnityMultiplayerEngineer]] 在客户端预测实现上存在框架差异: - UnityArchitect 侧:NetworkVariable 通过 SO 引用在 MonoBehaviour 间传递状态 - UnityMultiplayerEngineer 侧:NetworkVariable 直接挂载在 NetworkBehaviour 上 - 两者均遵循服务器权威原则,差异在于 SO 层抽象程度,属架构风格差异而非绝对冲突