/// <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; } } } }
/// <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); }
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); }
/// <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); }
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; }
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); } } } } } } }
public void SetPool(PoolPrefab RefPool) { _refPool = RefPool; }