Files
nexus/wiki/sources/unity-architect.md
2026-04-26 12:02:53 +08:00

59 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 层抽象程度,属架构风格差异而非绝对冲突