反序列化:异步加载资源完成后进行反序列化。Entities 文件的反序列化工作单纯的按预定的序列化格式读取字节,然后重新解析为 ID。包括读取的文件的导出版本,type 数量,每个 type 在 type manager 中的索引位置,entity 的总量等等,Shared Component 预制将获取其全部组件,反射成 ISharedComponentData,根据 .entities 文件中的 SharedComponentID 进行添加 。其中不包括无法转化的 C# 脚本。反序列化的执行在子线程进行。
添加实体:添加实体与反序列化一同执行,反序列化出的数据将更新 staging world 中的数据,因为序列化时 scetion world 与反序列时的 staging world 都是只包含此 scetion 内的数据,所以可以直接解析,在移动的时候需要 Remap 。与反序列执行在同一线程。
移动实体:在序列化和添加实体线程结束后,主线程向 main world 发出合并请求,合并时需要做一次 Remap 确认其引用关系(当前场景是否引用到已处于主场景的实体,更新其在主世界的真正位置),获取到 Remapping Info 后即可以对主场景调用 MoveEntitiesFrom() 将场景合入主场景。移动时主场景和子场景都进行一次同步。
编辑器
数据准备
实时处理
核心逻辑
总结
问题
对比与差异
逻辑差异
速度差异