Auto-sync: 2026-04-26 12:02

This commit is contained in:
2026-04-26 12:02:53 +08:00
parent c073392db8
commit 191797c01b
50 changed files with 2566 additions and 17 deletions

View File

@@ -0,0 +1,58 @@
---
title: "Unity Architect"
type: source
tags: []
date: 2026-04-26
---
## Source File
- [[Agent/agency-agents/game-development/unity/unity-architect.md]]
## Summary用中文描述
- 核心主题Unity 游戏架构师 AI Agent 人格规范专注于数据驱动、ScriptableObjectSO优先的模块化可扩展架构
- 问题域:如何构建避免"意大利面条式代码"的 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 MonoBehaviour500+ 行、DontDestroyOnLoad 单例滥用、Update 内轮询逻辑均为禁止项
- Unity DOTS 混合架构:性能关键系统迁移至 EntitiesECS编辑器友好型游戏逻辑保留 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 StackECS + Job System + Burst Compiler用于性能关键路径
- [[EditorUtilitySetDirty]]:编辑器脚本修改 SO 数据后必须调用以确保序列化持久化
## Key Entities
- [[UnityArchitect]]:本文档定义的 AI Agent 人格,数据驱动模块化架构专家,精通 ScriptableObject、职责拆分、单例消除
- [[UnityEditor]]Unity 编辑器环境ScriptableObject 通过 [CreateAssetMenu] 对设计师可见
- [[UnityDOTS]]Unity Data-Oriented Tech StackEntities、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 层抽象程度,属架构风格差异而非绝对冲突