protected override void OnUpdate() { Entities .WithName("InstantiateHybridPrefab") .WithoutBurst() .WithStructuralChanges() .WithNone <LinkedHybridPrefabData>() .ForEach((Entity e, in LinkedHybridPrefabComponent prefabComponent) => { var instance = HybridPrefabPool.GetInstance(prefabComponent.PrefabId); #if UNITY_EDITOR instance.name = $"{prefabComponent.PrefabId} : {instance.GetInstanceID()} ({World.Name})"; #endif for (int i = 0; i < instance.Callbacks.Length; i++) { instance.Callbacks[i].OnPoolInstantiate(e, World); } EntityManager.AddComponentData(e, new LinkedHybridPrefabData { InstanceId = instance.GetInstanceID() }); for (int i = 0; i < instance.ComponentsToAdd.Length; i++) { EntityManager.AddComponentObject(e, instance.ComponentsToAdd[i]); } if (prefabComponent.EntityNeedsTransform) { EntityManager.AddComponentObject(e, instance.transform); } }).Run(); }
private void Awake() { foreach (var prefab in Prefabs) { HybridPrefabPool.RegisterPrefab(prefab); } }
protected override void OnUpdate() { var cmdBuffer = _cmdBufferSystem.CreateCommandBuffer(); Entities .WithName("TeardownHybridPrefab") .WithoutBurst() .WithNone <LinkedHybridPrefabComponent>() .ForEach((Entity e, in LinkedHybridPrefabData instanceData) => { HybridPrefabPool.ReturnInstance(instanceData.InstanceId); cmdBuffer.RemoveComponent <LinkedHybridPrefabData>(e); }).Run(); }