using Unity.Entities; using Unity.Scenes; namespace Streaming.PrefabAndSceneReferences { [RequireMatchingQueriesForUpdate] [WorldSystemFilter(WorldSystemFilterFlags.Default | WorldSystemFilterFlags.Editor)] public partial struct LoadingSystem : ISystem { public void OnCreate(ref SystemState state) { state.RequireForUpdate(); } public void OnUpdate(ref SystemState state) { var ecbSystem = SystemAPI.GetSingleton(); var ecb = ecbSystem.CreateCommandBuffer(state.WorldUnmanaged); // request load weak scene references foreach (var (weakSceneReference, entity) in SystemAPI.Query>() .WithEntityAccess()) { var sceneEntity = ecb.CreateEntity(); ecb.AddComponent(sceneEntity, new RequestSceneLoaded()); ecb.AddComponent(sceneEntity, new Unity.Entities.SceneReference(weakSceneReference.ValueRO.Value)); ecb.RemoveComponent(entity); } // request load weak prefab references foreach (var (weakPrefabReference, entity) in SystemAPI.Query>() .WithNone() .WithEntityAccess()) { ecb.AddComponent(entity, new RequestEntityPrefabLoaded { Prefab = weakPrefabReference.ValueRO.Value }); } // instantiated the weak prefab references once they're loaded foreach (var (prefabLoadResult, entity) in SystemAPI.Query>() .WithAll() .WithEntityAccess()) { ecb.Instantiate(prefabLoadResult.ValueRO.PrefabRoot); ecb.RemoveComponent(entity); } } } }