Esempio n. 1
0
        /// <summary>
        /// プール数を1個づつ調整
        /// </summary>
        public void Adjust()
        {
            //foreach(PoolPrefab poolPrefab in poolList)
            for (int i = 0; i < poolList.Count; ++i)
            {
                PoolPrefab poolPrefab = poolList[i];

                if (poolPrefab.counter < poolPrefab.init)
                {
                    poolPrefab.counter += 1;
                    ObjectPool.Instance.InstantiateSleapPool((GameObject)poolPrefab.poolPrefab);
                    return;
                }
                else
                {
                    int count = ObjectPool.Instance.CountPool((GameObject)poolPrefab.poolPrefab);
                    if (poolPrefab.min > count)
                    {
                        ObjectPool.Instance.InstantiateSleapPool((GameObject)poolPrefab.poolPrefab);
                        return;
                    }
                    else if (count > poolPrefab.max)
                    {
                        ObjectPool.Instance.DestroyPool((GameObject)poolPrefab.poolPrefab);
                        return;
                    }
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// リストから同じプレハブを探す、無ければリストに追加する。
        /// </summary>
        private PoolPrefab GetPoolPrefab(GameObject poolPrefab)
        {
            for (int i = 0; i < poolList.Count; ++i)
            {
                if (poolList[i].poolPrefab == poolPrefab)
                {
                    return(poolList[i]);
                }
            }
            PoolPrefab new_PoolPrefab = new PoolPrefab();

            poolList.Add(new_PoolPrefab);
            return(new_PoolPrefab);
        }
Esempio n. 3
0
    public void CreatePool(PoolObjectComponent PrefabToPool, int Size)
    {
        if (_mapPools.ContainsKey(PrefabToPool))
        {
            Debug.LogWarning("[" + PrefabToPool.gameObject.name + "] is already in it");
            return;
        }

        GameObject goContainer    = new GameObject("[" + PrefabToPool.name + "]");
        Transform  transContainer = goContainer.transform;

        transContainer.parent   = _container;
        _mapPools[PrefabToPool] = new PoolPrefab(PrefabToPool, transContainer, Size);
    }
Esempio n. 4
0
        /// <summary>
        /// プールするプレハブをリストに追加(同じプレハブは設定を上書き)
        /// </summary>
        /// <param name="poolPrefab"></param>
        /// <param name="init">初期作成数</param>
        /// <param name="min">最小数</param>
        /// <param name="max">最大数</param>
        public void AddPoolList(GameObject poolPrefab, int init, int min, int max)
        {
            if (poolPrefab == null)
            {
                return;
            }

            PoolPrefab new_PoolPrefab = GetPoolPrefab(poolPrefab);

            new_PoolPrefab.poolPrefab = poolPrefab;
            new_PoolPrefab.init       = init;
            new_PoolPrefab.min        = min;
            new_PoolPrefab.max        = max;
            NunmerChack(new_PoolPrefab);
        }
Esempio n. 5
0
        private void Awake()
        {
            for (int i = 0; i < poolPrefabs.Length; ++i)
            {
                PoolPrefab poolPrefab = poolPrefabs[i];

                GameObject     root = new GameObject(poolPrefab.name);
                GameObjectPool pool = new GameObjectPool(poolPrefab.prefabs, poolPrefab.defaultNumber, root.transform, poolPrefab.name);

                poolTable.Add(poolPrefab.name, pool);
                root.transform.SetParent(transform);
            }

            instance = this;
        }
Esempio n. 6
0
        private void NunmerChack(PoolPrefab prefab)
        {
            //初期プールより最大数が少ない場合は設定を同じにする
            if (prefab.init > prefab.max)
            {
                prefab.max = prefab.init;
            }
            //最小数が最大数より大きい場合は設定を同じにする
            if (prefab.min > prefab.max)
            {
                prefab.min = prefab.max;
            }

            if (prefab.poolPrefab == null)
            {
                Debug.Log("ObjectPoolManager.poolPrefab is none");
            }
        }
    private void Awake()
    {
        if (!CreateSingleton())
        {
            return;
        }
        else
        {
            if (this.poolTypeManagerDictionary == null)
            {
                this.poolTypeManagerDictionary = new Dictionary <string, TypePoolManager>();
            }

            if (this.poolTypeManagerDictionary.Count == 0)
            {
                for (int i = 0; i < this.poolPrefabList.Count; i++)
                {
                    PoolPrefab prefabToAdd = this.poolPrefabList[i];

                    if (prefabToAdd != null && prefabToAdd.prefab != null && !string.IsNullOrEmpty(prefabToAdd.type))
                    {
                        if (!this.poolTypeManagerDictionary.ContainsKey(prefabToAdd.type))
                        {
                            TypePoolManager poolManager = new TypePoolManager()
                            {
                                poolPrefabToUse = prefabToAdd,
                                typeName        = prefabToAdd.type
                            };

                            this.poolTypeManagerDictionary.Add(prefabToAdd.type, poolManager);
                            this.activePoolManagers.Add(poolManager);
                        }
                    }
                }
            }

            if (this.networkedPoolTypeManagerDictionary == null)
            {
                this.networkedPoolTypeManagerDictionary = new Dictionary <NetworkHash128, TypePoolManager>();
            }

            if (this.networkedPoolTypeManagerDictionary.Count == 0)
            {
                for (int i = 0; i < this.poolNetworkPrefabList.Count; i++)
                {
                    PoolPrefab prefabToAdd = this.poolNetworkPrefabList[i];

                    if (prefabToAdd != null && prefabToAdd.prefab != null)
                    {
                        NetworkIdentity networkIdentity = prefabToAdd.prefab.GetComponent <NetworkIdentity>();

                        if (networkIdentity != null)
                        {
                            NetworkHash128 assetId = networkIdentity.assetId;

                            if (!this.networkedPoolTypeManagerDictionary.ContainsKey(assetId))
                            {
                                TypePoolManager poolManager = new TypePoolManager()
                                {
                                    poolPrefabToUse = prefabToAdd,
                                };

                                this.networkedPoolTypeManagerDictionary.Add(assetId, poolManager);
                                this.activePoolManagers.Add(poolManager);

                                ClientScene.RegisterSpawnHandler(assetId, GetNetworkedPooledObject, ReturnNetworkedObjectToPool);
                            }
                        }
                    }
                }
            }
        }
    }
Esempio n. 8
0
 public void SetPool(PoolPrefab RefPool)
 {
     _refPool = RefPool;
 }