本章节为大家解析ECS案例,资源来自,大家自行获取:
https://github.com/Unity-Technologies/EntityComponentSystemSamples
5、SubScene——新的场景工作流
这个案例演示了SubScene的工作流,SubScene提供了一个更加有效的在Unity内编辑和加载场景的方式
这个案例使用了HelloCube中IJobForEach的Components和Systems,这个场景包括了一对正在旋转的Cube,而它们是在开始之后自动从一个SubScene中加载的
- 当你保存一个场景,Unity会将SubScene转化成一个原生的二进制格式,这个格式对内存而言是随时可以调度的,同时在RAM中也可以最小的数据更改量被加载和传输,该格式非常适合流式传输大量实体。
- 你可以在开始之后自动加载一个Sub Scene;你也可以延迟加载知道你从你的代码中流式传输SubScene(使用RequestSceneLoaded组件)
- 在默认情况下,即使在编辑器模式下,SubScene也是通过Entity二进制文件被加载
- 当你选择一个SubScene然后在Unity的Inspector点击Edit按钮对该场景进行编辑,在编辑的时候,你可以在Scene界面中看到Entities的层级结构,同时也能像之前一样对其进行编辑,一个"实时链接"转换管线可以应用任何你对Scene的改变
- 仅编辑场景的一部分并且仍然加载其他子场景的实体的功能,创建了一个可用于编辑大量场景的可扩展的工作流程
创建方式
在Unity的Hierarchy面板创建一个GameObject,添加SubScene组件,在SceneAsset中选择需要加载的场景,然后点击Rebuild Entity Cache(如果有警告就点击Clear),通过Edit按钮可以进入便编辑模式,按Close退出,使用Save保存场景,使用Load和Unload选择是否加载资源
6、SpawnFromMonoBehaviour
public GameObject Prefab;
public int CountX = 100;
public int CountY = 100;
void Start()
{
Entity prefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(Prefab, World.Active);
EntityManager entityManager = World.Active.EntityManager;
for (var x = 0; x < CountX; x++)
{
for (var y = 0; y < CountY; y++)
{
var instance = entityManager.Instantiate(prefab);
float3 position = transform.<