示例#1
0
    public GameObject Spawn(PoolableObjectKinds kind, bool shouldActivate = true)
    {
        var poolableObject = this.GetPoolableObjectByKind(kind);
        var objects        = poolableObject.objects;

        for (int i = 0; i < objects.Count; i++)
        {
            if (!objects[i].activeInHierarchy)
            {
                if (shouldActivate)
                {
                    objects[i].SetActive(true);
                    foreach (var pr in objects[i].GetComponentsInChildren <PoolableResettable>())
                    {
                        pr.ResetState();
                    }
                }
                return(objects[i]);
            }
        }

        print("Doubling pool (before: " + objects.Count + ")");

        if (poolableObject.autoscale)
        {
            InstantiateToPool(poolableObject, objects.Count);
        }

        print("Doubled pool (after: " + objects.Count + ")");

        objects = poolableObject.objects;
        for (int i = 0; i < objects.Count; i++)
        {
            if (!objects[i].activeInHierarchy)
            {
                if (shouldActivate)
                {
                    objects[i].SetActive(true);
                }
                return(objects[i]);
            }
        }

        return(null);
    }
示例#2
0
 public PoolableObject GetPoolableObjectByKind(PoolableObjectKinds kind)
 {
     return(this.poolableObjects.Find((f) => f.kind == kind));
 }