Skip to content

Latest commit

 

History

History
25 lines (18 loc) · 1.57 KB

scene-management.md

File metadata and controls

25 lines (18 loc) · 1.57 KB

场景调度

本篇手册指导如何在运行时调度场景(Unity scene)以动态地加载/卸载世界内容。

现有的场景调度模块十分简陋,后面要重新设计更动态灵活的、支持 DLC 的系统。 本篇内容是完全前瞻的,并不贴合现在的实际。

场景和关卡不是一回事

我们的游戏涉及到地图区域(即所谓「关卡」)的动态加载与调度,并且动态性是极高的。 Unity 的场景调度系统只能在固定的位置按 build index 加载固定的关卡,并不能满足我们的需求。 因此,关卡设计师应当把世界拆成可调度的碎片(world fragments),每个碎片存成 prefab。 通常,一个碎片对应一个关卡,但也有 404 房间这种可随意生成的结构。

那么 Unity 场景又是干什么的? 答案是:储存应用的互斥模态。 例如,游戏的开始界面(如果有)和主游戏是互斥的,机制测试世界、渲染测试世界、最终要发布的世界都是互斥的。 理论上来说,最终发布的游戏里应当只有开始界面和主游戏两个场景(可能还会有结束界面)。 在我们的程序框架里,不同场景永远不会同时共存。

世界碎片

世界碎片应当存成 prefab,平时可以在调试场景中更改(记得 apply changes!)。 打包发布时,则会 build 成 AssetBundle 从硬盘里动态加载,以免造成内存瓶颈。 这样做的另一个好处是支持 DLC(毕竟 DLC 本来就是 dynamically-loaded content)。