ECS官方案例4. SubScene

基于Unity2019最新ECS架构开发MMO游戏笔记3

  • 官方案例解析4
    • 4. SubScene
    • 小结
      • SubScene 逻辑图表
  • 更新计划
    • 作者的话
  • ECS系列目录
    • ECS官方示例1:ForEach
    • ECS官方案例2:IJobForEach
    • ECS官方案例3:IJobChunk
    • ECS官方案例4:SubScene
    • ECS官方案例5:SpawnFromMonoBehaviour
    • ECS官方案例6:SpawnFromEntity
    • ECS官方案例7:SpawnAndRemove
    • ECS进阶:FixedTimestepWorkaround
    • ECS进阶:Boids
    • ECS进阶:场景切换器
    • ECS进阶:MegaCity0
    • ECS进阶:MegaCity1
    • UnityMMO资源整合&服务器部署
    • UnityMMO选人流程
    • UnityMMO主世界

官方案例解析4

开始之前的准备工作:
0下载Unity编辑器(2019.1.0f1 or 更新的版本),if(已经下载了)continue;
1下载官方案例,打开Git Shell输入:
git clone https://github.com/Unity-Technologies/EntityComponentSystemSamples.git --recurse
or 点击Unity官方ECS示例下载代码
if(已经下载了)continue;
2用Unity Hub打开官方的项目:ECSSamples
3在Assets目录下找到HelloCube/4. SubScene ,并打开SubScene 场景

4. SubScene

这个案例演示子场景的工作流程,为在Unity中编辑和加载大型游戏场景提供一种高效方式。下面来一探究竟:

  • Main Camera ……主摄像机
  • Directional Light……光源
  • RotatingCube……旋转的方块?No,这是场景Scene

这次可不太一样了,RotatingCube不在是之前的那对舞娘方块儿了,而化身成为一个场景。可即便是以更高级别的Scene出场,她始终逃不出旋转的命运,突然觉得RotatingCube命运之忧伤,仿佛那首天后的歌:

旋转的木马没有翅膀
但却能够带着你到处飞翔
音乐停下来你将离场
我也只能这样

一边听着《旋木》,一边来看看主宰RotatingCube命运的SubScene脚本好了:

这个脚本主要将案例2的IJobForEach场景里的那对方块实体复用到这个场景中,提供了复用实体的解决方案
在编辑器中点击Edit,就可以看到RotatingCube出现在场景中,这个时候它身上已经不再需要ConvertToEntity脚本了
因为它本身将以实体的形式被创造出来,所以无需转换

代码做的就是这样,因为代码篇幅较长,所以并没有详细注释粘贴出来,有兴趣的朋友不妨研究一下。
我比较看重如何使用SubScene的特性,以下是使用步骤:
0在Unity编辑器Hierarchy层级窗口中,选中想要添加到SubScene的父游戏对象,这样其子游戏对象也会随着父亲进入SubScene场景,鼠标右击弹出下拉列表;
1在下拉列表的最下方,找到New SubScene from Selection选项,点击该选项;
2接下来,Unity会将该对象及其子对象,一同移入到SubScene对象中,并在项目中创建一个Scene Asset文件;
3该Scene Asset文件会显示在SubScene对象的Inspector检视窗口中;
4我们还可以通过Inspector检视窗口中的AutoLoadScene(是否自动加载)复选框来操纵其加载时机;
5也可以通过Inspector检视窗口中的Edit(编辑)和Save(保存)按钮来进行改动。

小结

那么为什么ECS要使用SubScene呢?
原因很简单,速度快,可以根据需求来快速加载场景资源。
看下SubScene的工作原理,也许就更加明白了!

SubScene 逻辑图表

Save
memory-ready
Data
Load
Entities
Loaded
Schedule
OnUpdate
SubScene
Binary
RAM
Entities
Component
MainScene
DOTS
System
Burst
Jobs
ForEach

不知道有没有画明白整个流程,再大概解释一下吧,当我们保存SubScene的时候,是以原生的二进制(Binary)形式来储存的。这种原生二进制加载速度非常快,可以说是时刻准备着(memory-ready),它将以随机存取储存器RAM (Random Access Memory) 最小代价来加载。这种形式非常适合加载大量的实体,所以在主场景(MainScene)加载SubScene的时候,RAM将返回大量的实体到主场景中,从而完成子场景SubScene的加载。
这些从SubScene加载到主场景的大量的实体依然由DOTS来掌控,一旦加载完成就自动交接给DOTS了,剩下的东西在前面已经讲过了,此处应该可以看明白了。
这里要指出的是,这个流程是我根据表象来推测的,底层是否这么做,关系并不大,我们只需要编写ECS的代码即可。

更新计划

Mon 12 Mon 19 Mon 26 1. ForEach 2. IJobForEach 3. IJobChunk 4. SubScene 5. SpawnFromMonoBehaviour 6. SpawnFromEntity 7. SpawnAndRemove 休息 修正更新计划 参加表哥婚礼 进阶:FixedTimestepWorkaround 进阶:BoidExample 进阶:SceneSwitcher 我是休息时间 资源整合 部署服务器 启动流程 登录流程 游戏主世界 待计划 待计划 待计划 待计划 待计划 我是休息时间 待计划 待计划 待计划 待计划 待计划 我是休息时间 读取Excel自动生成Entity 读取Excel自动生成Component 读取数据库自动生成Entity 读取数据库自动生成Component ESC LuaFrameWork Skynet DOTS 官方示例学习笔记 -----休息----- 基于ECS架构开发MMO学习笔记 LuaFrameWork学习笔记 -----休息----- 基于Skynet架构开发服务器学习笔记 制作代码自动生成工具 总结 基于Unity2019最新ECS架构开发MMO游戏笔记

作者的话

AltAlt

如果喜欢我的文章可以点赞支持一下,谢谢鼓励!如果有什么疑问可以给我留言,有错漏的地方请批评指证!
如果有技术难题需要讨论,可以加入开发者联盟:566189328(付费群)为您提供有限的技术支持,以及,心灵鸡汤!
当然,不需要技术支持也欢迎加入进来,随时可以请我喝咖啡、茶和果汁!( ̄┰ ̄*)

ECS系列目录

ECS官方示例1:ForEach

ECS官方案例2:IJobForEach

ECS官方案例3:IJobChunk

ECS官方案例4:SubScene

ECS官方案例5:SpawnFromMonoBehaviour

ECS官方案例6:SpawnFromEntity

ECS官方案例7:SpawnAndRemove

ECS进阶:FixedTimestepWorkaround

ECS进阶:Boids

ECS进阶:场景切换器

ECS进阶:MegaCity0

ECS进阶:MegaCity1

UnityMMO资源整合&服务器部署

UnityMMO选人流程

UnityMMO主世界

你可能感兴趣的:(ECS,DOTS,Unity)