示例#1
0
        public void CreatePool(Tier tier, GameObject prefab, int poolSize)
        {
            int poolKey = prefab.GetInstanceID();

            switch (tier)
            {
            case Tier.TierOne:
                if (!tierOneDictionary.ContainsKey(poolKey))
                {
                    tierOneDictionary.Add(poolKey, new Queue <MonsterInstance>());
                    GameObject poolHolder = new GameObject(prefab.name + " pool");
                    poolHolder.transform.parent = transform;

                    for (int i = 0; i < poolSize; i++)
                    {
                        MonsterInstance newMonster = new MonsterInstance(Instantiate(prefab) as GameObject);
                        tierOneDictionary[poolKey].Enqueue(newMonster);
                        newMonster.SetParent(poolHolder.transform);
                    }
                }

                break;

            case Tier.TierTwo:
                if (!tierTwoDictionary.ContainsKey(poolKey))
                {
                    tierTwoDictionary.Add(poolKey, new Queue <MonsterInstance>());
                    GameObject poolHolder = new GameObject(prefab.name + " pool");
                    poolHolder.transform.parent = transform;

                    for (int i = 0; i < poolSize; i++)
                    {
                        MonsterInstance newMonster = new MonsterInstance(Instantiate(prefab) as GameObject);
                        tierTwoDictionary[poolKey].Enqueue(newMonster);
                        newMonster.SetParent(poolHolder.transform);
                    }
                }

                break;

            case Tier.TierThree:
                if (!tierThreeDictionary.ContainsKey(poolKey))
                {
                    tierThreeDictionary.Add(poolKey, new Queue <MonsterInstance>());
                    GameObject poolHolder = new GameObject(prefab.name + " pool");
                    poolHolder.transform.parent = transform;

                    for (int i = 0; i < poolSize; i++)
                    {
                        MonsterInstance newMonster = new MonsterInstance(Instantiate(prefab) as GameObject);
                        tierThreeDictionary[poolKey].Enqueue(newMonster);
                        newMonster.SetParent(poolHolder.transform);
                    }
                }

                break;
            }
        }
示例#2
0
        public void ReuseObject(Tier tier, GameObject prefab, Vector3 position, Quaternion rotation)
        {
            int poolKey = prefab.GetInstanceID();

            switch (tier)
            {
            case Tier.TierOne:
                if (tierOneDictionary.ContainsKey(poolKey))
                {
                    MonsterInstance monsterToReuse = tierOneDictionary [poolKey].Dequeue();
                    tierOneDictionary [poolKey].Enqueue(monsterToReuse);

                    monsterToReuse.Reuse(position, rotation);
                }

                break;

            case Tier.TierTwo:
                if (tierTwoDictionary.ContainsKey(poolKey))
                {
                    MonsterInstance monsterToReuse = tierTwoDictionary [poolKey].Dequeue();
                    tierTwoDictionary [poolKey].Enqueue(monsterToReuse);

                    monsterToReuse.Reuse(position, rotation);
                }

                break;

            case Tier.TierThree:
                if (tierThreeDictionary.ContainsKey(poolKey))
                {
                    MonsterInstance monsterToReuse = tierThreeDictionary [poolKey].Dequeue();
                    tierThreeDictionary [poolKey].Enqueue(monsterToReuse);

                    monsterToReuse.Reuse(position, rotation);
                }

                break;
            }
        }