예제 #1
0
    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();
    }