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

4.5 KiB
Raw Blame History

title, type, tags, date
title type tags date
Unity Architect source
2026-04-26

Source File

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

  • ScriptableObjectUnity 资产形式的可序列化对象,用于存储共享数据、事件通道、运行时集合
  • RuntimeSet:继承 ScriptableObject 的泛型集合类型,用于全局追踪活跃实体而不依赖单例
  • GameEventSO 形式的事件通道GameEvent : ScriptableObject用于跨系统解耦通信
  • SingleResponsibilityPrinciple:每个 MonoBehaviour 只负责单一职责,超过 150 行即违反
  • EventDrivenArchitecture:事件驱动替代 Update() 内轮询,消除 GC 分配
  • DataDrivenDesign:数据驱动的模块化 Unity 架构设计理念
  • ScriptableObjectEventChannelScriptableObject 形式的 GameEvent 系统,通过 Raise/Register 模式实现松耦合
  • AddressablesUnity 资源管理系统,替代 Resources.Load(),支持细粒度内存控制和 DLC
  • UnityDOTSData-Oriented Tech StackECS + Job System + Burst Compiler用于性能关键路径
  • EditorUtilitySetDirty:编辑器脚本修改 SO 数据后必须调用以确保序列化持久化

Key Entities

  • UnityArchitect:本文档定义的 AI Agent 人格,数据驱动模块化架构专家,精通 ScriptableObject、职责拆分、单例消除
  • UnityEditorUnity 编辑器环境ScriptableObject 通过 [CreateAssetMenu] 对设计师可见
  • UnityDOTSUnity Data-Oriented Tech StackEntities、Jobs、Burst用于 CPU 密集型批量操作

Connections

Contradictions

  • UnityMultiplayerEngineer 在客户端预测实现上存在框架差异:
    • UnityArchitect 侧NetworkVariable 通过 SO 引用在 MonoBehaviour 间传递状态
    • UnityMultiplayerEngineer 侧NetworkVariable 直接挂载在 NetworkBehaviour 上
    • 两者均遵循服务器权威原则,差异在于 SO 层抽象程度,属架构风格差异而非绝对冲突