using System.Collections.Generic; using Unity.Entities; using Unity.Entities.Serialization; using Unity.Scenes; using UnityEngine; namespace jeanf.scenemanagement { #if UNITY_EDITOR public class VolumeSetAuthoring : MonoBehaviour { public List volumes; public class Baker : Baker { public override void Bake(VolumeSetAuthoring authoring) { var subScene = GetComponent(); if (subScene != null && authoring.volumes != null && authoring.volumes.Count > 0) { var sceneEntity = CreateAdditionalEntity(TransformUsageFlags.None, false, $"{subScene.SceneAsset.name}_Loader"); AddComponent(sceneEntity, new LevelInfo { sceneReference = new EntitySceneReference(subScene.SceneAsset) }); AddComponent(sceneEntity, new StreamingGO { InstanceID = authoring.gameObject.GetInstanceID() }); var buffer = AddBuffer(sceneEntity); foreach (var volume in authoring.volumes) { var entity = GetEntity(volume, TransformUsageFlags.None); if (entity != Entity.Null) { buffer.Add(new VolumeBuffer { volumeEntity = entity }); } } } } } } #endif public struct LevelInfo : IComponentData { public EntitySceneReference sceneReference; public Entity runtimeEntity; } public struct VolumeBuffer : IBufferElementData { public Entity volumeEntity; } }