一、开场:Unity 是如何「跳动」心脏的?
Unity 启动后,玩家看到的是一个不断刷新的画面:角色移动、敌人 AI 思考、动画过渡、物理模拟……这一切都是PlayerLoop在调度。
PlayerLoop 不是简单的while(true) { Update(); }——它是 Unity 引擎的核心调度框架,把引擎的所有系统(输入、物理、动画、渲染、协程等)按优先级和依赖关系组织起来。
理解 PlayerLoop,你就理解了 Unity 引擎的「心脏」如何跳动。
本文从架构、Subsystem 注册、自定义扩展、协程、跨平台适配五个层面系统拆解 PlayerLoop。
二、PlayerLoop 的架构
2.1 整体结构
PlayerLoop (Root) ├── Initialization (初始化阶段) │ ├── PlayerUpdateCanvases │ ├── UpdateRectTransform │ ├── PlayerUpdateLoadingScreen │ ├── UnityAnalytics │ └── ... ├── EarlyUpdate (早期更新) │ ├── PollPlayerConnection │ ├── GpuTimestamp │ ├── UpdatePreloading │ ├── UpdateStreaming │ └── ... ├── FixedUpdate (固定频率更新) │ ├── PhysicsFixedUpdate