Esempio n. 1
0
    public override void OnInspectorGUI()
    {
        _ObjectPooler = (ObjectPooler)target;
        EditorUtility.SetDirty(_ObjectPooler);

        _ObjectPooler.defaultCount = EditorGUILayout.IntField("Default Buffer Amount", _ObjectPooler.defaultCount);

        EditorGUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        EditorGUILayout.LabelField("GO");
        GUILayout.FlexibleSpace();
        EditorGUILayout.LabelField("Buffer Amount");
        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();

        for (int i = 0; i < _ObjectPooler.Prefabs.Count; i++)
        {
            EditorGUILayout.BeginHorizontal("box");
            _ObjectPooler.Prefabs[i].GO            = (GameObject)EditorGUILayout.ObjectField(_ObjectPooler.Prefabs[i].GO, typeof(GameObject), false);
            _ObjectPooler.Prefabs[i].instanceCount = EditorGUILayout.IntField(_ObjectPooler.Prefabs[i].instanceCount);
            if (GUILayout.Button("X"))
            {
                _ObjectPooler.Prefabs.RemoveAt(i);
            }
            EditorGUILayout.EndHorizontal();
        }

        if (GUILayout.Button("Add Prefabs"))
        {
            ObjectPoolInfo info = new ObjectPoolInfo();
            info.instanceCount = _ObjectPooler.defaultCount;
            _ObjectPooler.Prefabs.Add(info);
        }
    }
Esempio n. 2
0
 void FillObjectPoolList(ObjectPoolInfo objectPoolInfo, ref List <GameObject> objectPoolList, int count)
 {
     for (int i = 0; i < objectPoolInfo.count; i++)
     {
         objectPoolList.Add(Spawn(objectPoolInfo.prefab, objectPoolContainer));
         objectPoolList[i].SetActive(false);
     }
 }
Esempio n. 3
0
    public void AddToPool(GameObject instance, ObjectPoolType type)
    {
        instance.SetActive(false);

        ObjectPoolInfo poolInfo = allPools.Find(pool => pool.type.Equals(type));

        poolInfo.pool.Enqueue(instance);
    }
Esempio n. 4
0
    public GameObject GetFromPool(ObjectPoolType type)
    {
        ObjectPoolInfo     poolInfo = allPools.Find(p => p.type.Equals(type));
        Queue <GameObject> pool     = poolInfo.pool;

        if (poolInfo.canGrow && pool.Count == 0)
        {
            GrowPool(poolInfo);
        }

        GameObject instance = pool.Dequeue();

        instance.SetActive(true);

        return(instance);
    }
Esempio n. 5
0
    private void GrowPool(ObjectPoolInfo poolInfo)
    {
        int                poolSize  = poolInfo.poolSize;
        GameObject         prefab    = poolInfo.prefab;
        GameObject         container = poolInfo.container;
        Queue <GameObject> pool      = poolInfo.pool;

        for (int i = 0; i < poolSize; i++)
        {
            GameObject instance = Instantiate(prefab, container.transform);

            instance.SetActive(false);

            pool.Enqueue(instance);
        }
    }
Esempio n. 6
0
 private void Start()
 {
     DontDestroyOnLoad(gameObject);
     for (int i = 0; i < Prefabs.Count; i++)
     {
         if (Prefabs[i].instanceCount > 0)
         {
             ObjectPoolInfo obj = new ObjectPoolInfo();
             for (int j = 0; j < Prefabs[i].instanceCount; j++)
             {
                 GameObject go = Instantiate(Prefabs[i].GO);
                 go.name = Prefabs[i].GO.name;
                 obj.GO_Instances.Add(go);
                 obj.GO            = go;
                 obj.instanceCount = Prefabs[i].instanceCount;
                 go.transform.SetParent(transform);
                 go.SetActive(false);
             }
             PooledObjects.Add(obj);
         }
         else
         {
             ObjectPoolInfo obj = new ObjectPoolInfo();
             for (int j = 0; j < defaultCount; j++)
             {
                 GameObject go = Instantiate(Prefabs[i].GO);
                 go.name = Prefabs[i].GO.name;
                 obj.GO_Instances.Add(go);
                 obj.GO            = go;
                 obj.instanceCount = defaultCount;
                 go.transform.SetParent(transform);
                 go.SetActive(false);
             }
             PooledObjects.Add(obj);
         }
     }
 }