コード例 #1
0
ファイル: ObjectPool.cs プロジェクト: WakingDragon/Almighty
        public GameObject GetObjectFromPool(IPoolableAsset asset, Vector3 position, Quaternion rotation)
        {
            if (position == null)
            {
                position = Vector3.zero;
            }
            if (rotation == null)
            {
                rotation = Quaternion.identity;
            }

            if (!PoolExistsInMaster(asset))
            {
                TryCreateNewPool(asset);
                return(null);        //TODO - this means the first GO will always be missing when adding on the fly
            }

            var objectPool = poolMaster[asset.GetIPoolableAssetName()];

            var go = FindInactiveObjectInPool(objectPool);

            if (go == null)
            {
                go = AddNewGameObjectToPool(asset, objectPool);
                go.SetActive(true);
            }

            if (go != null)
            {
                //go.transform.parent = null;
                SetObjectPositionAndRotation(go, position, rotation);
            }

            return(go);
        }
コード例 #2
0
ファイル: ObjectPool.cs プロジェクト: WakingDragon/Almighty
        private bool PoolExistsInMaster(IPoolableAsset poolAsset)
        {
            var assetName = poolAsset.GetIPoolableAssetName();

            if (poolMaster.ContainsKey(assetName))
            {
                return(true);
            }
            return(false);
        }
コード例 #3
0
ファイル: ObjectPool.cs プロジェクト: WakingDragon/Almighty
        private GameObject AddNewGameObjectToPool(IPoolableAsset asset, List <GameObject> objectPool)
        {
            GameObject go     = asset.InstantiatePrefabToPool(transform);
            int        prefix = objectPool.Count + 1;

            go.name = prefix + " " + asset.GetIPoolableAssetName();

            if (go)
            {
                objectPool.Add(go);
            }
            return(go);
        }
コード例 #4
0
ファイル: ObjectPool.cs プロジェクト: WakingDragon/Almighty
        private PoolTypes CreatePoolFromAsset(IPoolableAsset poolAsset)
        {
            PoolTypes newPool = new PoolTypes
            {
                tag                 = poolAsset.GetIPoolableAssetName(),
                asset               = poolAsset.GetIPoolableAsset(),
                prefab              = null,
                size                = poolAsset.GetNumberToPool(),
                canExpand           = poolAsset.GetIsPoolExpandable(),
                isSelfInstantiating = true,
                sceneName           = GetActiveScene()
            };

            poolTypes.Add(newPool);
            return(newPool);
        }