コード例 #1
0
    public void DeregisterPooledObject(string objectId)
    {
        // assert that a pool with this id exists
        if (!_objectPool.ContainsKey(objectId))
        {
            CustomLogger.Error(nameof(PooledObjectManager), $"Does not contain entry with id {objectId}!");
            return;
        }
        // despawn all currently active pooled objects
        List <PooledObject> objsToRemove = new List <PooledObject>();

        for (int i = 0; i < _objectPool[objectId].InUseObjects.Count; i++)
        {
            PooledObject pooledObject = _objectPool[objectId].InUseObjects[i];
            pooledObject.Despawn();
            pooledObject.Dispose();
            objsToRemove.Add(pooledObject);
        }
        _objectPool[objectId].AvailableObjects.AddRange(objsToRemove);
        // remove all existing pooled objects
        foreach (PooledObject pooledObject in _objectPool[objectId].AvailableObjects)
        {
            GameObject go = _objectPool[objectId].GameObjects[pooledObject];
            Destroy(go);
        }
        _objectPool.Remove(objectId);
    }
 private void CleanUpInteractables()
 {
     for (int i = 0; i < _interactables.Count; i++)
     {
         _interactables[i].SetInteractable(false);
         PooledObject pooledObject = _interactables[i] as PooledObject;
         if (pooledObject != null)
         {
             pooledObject.Despawn();
             pooledObject.Dispose();
         }
     }
 }
コード例 #3
0
    private void CloneToPool(string poolId, GameObject resource, int count)
    {
        PooledObjectEntry entry = _objectPool[poolId];
        int currentCount        = entry.AvailableObjects.Count + entry.InUseObjects.Count;

        if (currentCount + count > MaximumObjectPoolSize)
        {
            CustomLogger.Warn(nameof(PooledObjectManager), $"Max pool size reached for {poolId}");
            count = MaximumObjectPoolSize - currentCount;
        }
        for (int i = 0; i < count; i++)
        {
            GameObject clone = Instantiate(resource, transform);
            clone.name = poolId;
            PooledObject clonePO = clone.GetComponent <PooledObject>();
            _objectPool[poolId].AvailableObjects.Add(clonePO);
            _objectPool[poolId].GameObjects.Add(clonePO, clone);
            clonePO.Despawn(); // hide the object
        }
    }
コード例 #4
0
    public PooledObject GetObjectFromPool()
    {
        // Ensure that we are not going to break the size of the array
        if (cursorIndex + 1 >= pooledObjectList.Count)
        {
            // If the cursor is pointing outside of the list, change it to point to the first item
            cursorIndex = 0;
        }

        // Get reference from the item
        PooledObject target = pooledObjectList[cursorIndex];

        // If this pool object is on screen, force to kill it from the screen first
        if (target.gameObject.activeSelf)
        {
            target.Despawn();
        }

        // Increase the cursor
        cursorIndex++;
        return(target);
    }
コード例 #5
0
ファイル: PoolTest.cs プロジェクト: IgorPereira/FenrirPack
 void Despawn()
 {
     persistentPoolObj.Despawn();
     scenePoolObj.Despawn();
 }