Unity 客户端运行架构:分层入口 private

Unity 客户端运行架构:分层入口

本篇只建立客户端全貌。Logic、Rendering 和 Editor 扩展已经拆成独立二级页,具体问题直接进入对应页面。

返回技术文档目录

1. 客户端的四层

flowchart TB
    Editor[Editor 扩展<br/>场景/配置/资源/构建] --> Assets[运行时资产与生成代码]
    Bootstrap[启动与装配<br/>ClientProxy / Zenject] --> Logic[Logic<br/>Entity / Actor / System / Rule]
    Assets --> Bootstrap
    Logic --> Render[Rendering<br/>GameObject / Animator / VFX / UI]
    Net[Network<br/>Login/Lobby/Battle] <--> Logic
层负责不负责深入阅读
启动与装配初始化顺序、资源、配置、World、系统注册具体玩法规则11 客户端启动模块
Logic状态、规则、System、移动/HP/刷怪意图材质、动画、Inspector23 客户端 Logic
RenderingPrefab、View、Animator、VFX、UI、位置表现服务端权威和最终业务判定24 客户端 Rendering
Editor地图/配置/资源制作、生成、检查、构建Player 运行逻辑25 Unity Editor 扩展

当前源码目录有历史混合,文档分层是责任分层,不代表目录和程序集已经完全解耦。

2. 启动顺序

入口是 Assets/Code/ClientProxy.cs:

flowchart TD
    A[ClientProxy.Awake] --> B[日志、任务、屏幕、质量]
    B --> C[Common.Root.Initialize]
    C --> D[AssetManager + Manifest]
    D --> E[UIManager + 平台 SDK]
    E --> F[本地化、URL、角色描述]
    F --> G[UpdateManager]
    G --> H[ConfigManager.LoadAllConfig]
    H --> I[VFX、技能/Buff 工厂]
    I --> J[MapAdapter.Initialize]
    J --> K[NetworkManager.Init]
    K --> L[UniqueWorld.OnCreate]
    L --> M[预加载 + UI 场景]
    M --> N[UILoginPanel]

地图、网络和 World 创建前,资源索引及首批配置必须可用。启动空引用先检查是否越过初始化边界。

3. 运行时核心

GameInstaller 用 Zenject 注册服务和 System。Entitas 使用四个 Context:

  • Core:Hero、Monster、GPE、Bullet 等状态。
  • Map:Spawner、Trigger、Portal、导航资源和地图事件。
  • Network:连接、远端实体、快照和同步。
  • GameObject:逻辑实体与 Unity 对象的桥接。
MapElement
  -> MapEntity
  -> CoreEntity
  -> Actor/NetworkEntity
  -> GameObjectEntity
  -> View

前半段主要属于 Logic,最后两段属于 Rendering,Network 在两者之间提供跨端输入。

4. 三类容易混淆的“服务器”

名称实际作用
Login/Lobby/Battle真正的 .NET 游戏后端
NetworkManager/BattleClientUnity 内的网络客户端
Jenny-Server.batEntitas 代码生成服务,不是游戏后端

Jenny 读取 Library/ScriptAssemblies/GameAssemblyNew.dll,根据 Component 生成 Assets/Code/Game/OGame/Generated。Unity 必须先编译成功,且生成目录不能手改。

5. 资源从 Editor 到 Runtime

flowchart LR
    Excel[Excel] --> ConfigTool[ConfigOption]
    Scene[地图场景] --> MapTool[Map Gather/Bake]
    Prefab[Prefab/模型/纹理] --> Importer[AssetPostprocessor]
    ConfigTool --> Config[配置代码和数据]
    MapTool --> MapData[地图 bytes/Nav/Lightmap]
    Importer --> Bundle[Addressables/AssetBundle]
    Config --> Runtime[Client Runtime]
    MapData --> Runtime
    Bundle --> Runtime

Editor 工具产生运行时输入,但 UnityEditor API 不能进入 Player。地图和配置还可能同时产出服务端副本。

6. 按现象选择文档

现象先看
启动卡住、服务未初始化11
状态错、规则重复执行、切图后仍响应23
实体存在但没有模型、动画或特效24
菜单、Inspector、导入、生成或构建出错25
玩家创建、出生点、输入和 Animator18
NavMesh、Agent、Portal、移动策略20
本地正常但远端错误、回滚或冲刺22
登录后切 Lobby/Battle 失败12

7. 客户端修改的最小检查

  1. 改规则:确认 Logic 状态、System 生命周期和网络权威。
  2. 改表现:确认 View 异步创建、对象池清理和本地/远端差异。
  3. 改 Editor:确认 Editor-only 程序集、可重复生成和产物版本。
  4. 改跨层接口:同时检查 CoreEntity、GameObjectEntity、IViewObject 和销毁流程。
  5. 改联机字段:客户端与 Battle 同批更新协议和配置。

上一篇:系统全景 · 下一篇:客户端 Logic