Пример #1
0
    //创建enemyPool
    void GenerateEnemyPool()
    {
        enemySpawnPool = PoolManager.Pools.Create(enemyPool);
        enemySpawnPool.group.parent      = transform;
        enemySpawnPool.dontDestroyOnLoad = true;

        if (SceneManager.GetActiveScene().name == Game.Instance.StaticData.Level3)
        {
            shellEnemyInfo = Game.Instance.StaticData.shellEnemyList;
            foreach (EnemyInfo info in shellEnemyInfo)
            {
                PrefabPool prefabPool = new PrefabPool(info.Prefab.transform);
                PoolSetting(prefabPool, 4);
                enemySpawnPool.CreatePrefabPool(prefabPool);
            }
        }
        else
        {
            enemyInfo = Game.Instance.StaticData.enemyList;
            foreach (EnemyInfo info in enemyInfo)
            {
                PrefabPool prefabPool = new PrefabPool(info.Prefab.transform);
                PoolSetting(prefabPool, 4);
                enemySpawnPool.CreatePrefabPool(prefabPool);
            }

            bossEnemyInfo = Game.Instance.StaticData.bossEnemyList;
            foreach (EnemyInfo info in bossEnemyInfo)
            {
                PrefabPool prefabPool = new PrefabPool(info.Prefab.transform);
                PoolSetting(prefabPool, 12);
                enemySpawnPool.CreatePrefabPool(prefabPool);
            }
        }
    }
Пример #2
0
    public Transform PlayEffect(string effectName, float delayDestroy = 0f)
    {
        if (!m_EffectDic.ContainsKey(effectName))
        {
            GameObject go = LoadEffect(effectName);
            if (go == null)
            {
                return(null);
            }
            m_EffectDic[effectName] = go.transform;
            PrefabPool prefabPool = new PrefabPool(m_EffectDic[effectName]);
            prefabPool.PreloadAmount   = 0;    //预加载数量
            prefabPool.IsCullDespawned = true; //是否开启缓存池自动清理
            prefabPool.CullAbove       = 1;    //缓存池自动清理 但是始终保留对象的个数
            prefabPool.CullDelay       = 5;    //多长时间清理一次   秒
            prefabPool.CullMaxPerPass  = 2;    //每次清理几个
            m_EffectPool.CreatePrefabPool(prefabPool);
        }

        Transform effect = m_EffectPool.Spawn(m_EffectDic[effectName]);

        if (delayDestroy > 0f)
        {
            DestroyEffect(effect, delayDestroy);
        }
        return(effect);
    }
Пример #3
0
    private void pool_Initialize()
    {
        NotePool = PoolManager.Pools.Create("MusicNote", this.gameObject);
        NotePool.dontDestroyOnLoad = true;

        pool_singleNote = new PrefabPool(PlayerCollection.PlayerNoteCollection["singleOne"].transform);
        pool_singleNote.preloadAmount = 5;
        pool_singleNote.cullDespawned = true;
        pool_singleNote.cullAbove     = 20;
        pool_singleNote.cullDelay     = 10;
        NotePool.CreatePrefabPool(pool_singleNote);

        pool_singleNote = new PrefabPool(PlayerCollection.PlayerNoteCollection["singleTwo"].transform);
        pool_singleNote.preloadAmount = 5;
        pool_singleNote.cullDespawned = true;
        pool_singleNote.cullAbove     = 20;
        pool_singleNote.cullDelay     = 10;
        NotePool.CreatePrefabPool(pool_singleNote);

        beamsone_1 = new PrefabPool(PlayerCollection.PlayerNoteCollection["beamOne_1"].transform);
        beamsone_1.preloadAmount = 10;
        beamsone_1.cullDespawned = true;
        beamsone_1.cullAbove     = 20;
        beamsone_1.cullDelay     = 10;
        NotePool.CreatePrefabPool(beamsone_1);

        beamstwo_1 = new PrefabPool(PlayerCollection.PlayerNoteCollection["beamTwo_1"].transform);
        beamstwo_1.preloadAmount = 10;
        beamstwo_1.cullDespawned = true;
        beamstwo_1.cullAbove     = 20;
        beamstwo_1.cullDelay     = 10;
        NotePool.CreatePrefabPool(beamstwo_1);
    }
Пример #4
0
    //创建effectPool
    void GenerateEffectPool()
    {
        effectSpawnPool = PoolManager.Pools.Create(effectPool);
        effectSpawnPool.group.parent = transform;
        enemyEffectInfo = Game.Instance.StaticData.enemyEffectList;
        foreach (EffectInfo info in enemyEffectInfo)
        {
            PrefabPool prefabPool = new PrefabPool(info.Prefab.transform);
            switch (info.Prefab.name)
            {
            case "GenerationEffect":
                PoolSetting(prefabPool, 8);
                break;

            case "DeadEffect":
                PoolSetting(prefabPool, 6);
                break;

            case "BubbleSinisterAttackEffect":
                PoolSetting(prefabPool, 50);
                break;

            case "BubbleAngryAttackEffect":
                PoolSetting(prefabPool, 4);
                break;
            }
            effectSpawnPool.CreatePrefabPool(prefabPool);
        }

        bossEffectInfo = Game.Instance.StaticData.bossEffectList;
        foreach (EffectInfo info in bossEffectInfo)
        {
            PrefabPool prefabPool = new PrefabPool(info.Prefab.transform);
            switch (info.Prefab.name)
            {
            case "MarkEffect":
                PoolSetting(prefabPool, 20);
                break;

            case "ThunderEffect":
                PoolSetting(prefabPool, 20);
                break;
            }
            effectSpawnPool.CreatePrefabPool(prefabPool);
        }

        if (SceneManager.GetActiveScene().name == Game.Instance.StaticData.Level3)
        {
            bonfireEffectInfo = Game.Instance.StaticData.bonfireEffect;
            PrefabPool prefabPool = new PrefabPool(bonfireEffectInfo.Prefab.transform);
            if (bonfireEffectInfo.Prefab.name == "BonfireEffect")
            {
                PoolSetting(prefabPool, 2);
            }
            effectSpawnPool.CreatePrefabPool(prefabPool);
        }
    }
Пример #5
0
    static void CreatePrefabPool(SpawnPool spawnPool, Transform prefab, int num)
    {
        if (spawnPool._perPrefabPoolOptions.Any(c => c.prefab.name == prefab.name))
        {
            return;
        }
        PrefabPool refabPool = new PrefabPool(prefab);

        refabPool.preloadTime   = false;
        refabPool.preloadFrames = 2;
        refabPool.preloadDelay  = 1.0f;
        //默认初始化两个Prefab
        refabPool.preloadAmount = num;
        //开启限制
        refabPool.limitInstances = true;
        //关闭无限取Prefab
        refabPool.limitFIFO = true;
        //限制池子里最大的Prefab数量
        refabPool.limitAmount = num * 10;
        //开启自动清理池子
        refabPool.cullDespawned = false;
        //最终保留
        refabPool.cullAbove = 0;
        //多久清理一次
        refabPool.cullDelay = 5;
        //每次清理几个
        refabPool.cullMaxPerPass = num;
        spawnPool._perPrefabPoolOptions.Add(refabPool);
        spawnPool.CreatePrefabPool(refabPool);
    }
Пример #6
0
 private void InitPool()
 {
     for (int i = 0; i < 2; i++)
     {
         Transform  tr        = Resources.Load <Transform>(_prefabPaths[i]);
         PrefabPool refabPool = new PrefabPool(tr);
         //默认初始化两个Prefab
         refabPool.preloadAmount = 2;
         //开启限制
         refabPool.limitInstances = false;
         //关闭无限取Prefab
         refabPool.limitFIFO = false;
         //限制池子里最大的Prefab数量
         refabPool.limitAmount = 5;
         //开启自动清理池子
         refabPool.cullDespawned = true;
         //最终保留
         refabPool.cullAbove = 10;
         //多久清理一次
         refabPool.cullDelay = 5;
         //每次清理几个
         refabPool.cullMaxPerPass = 5;
         //初始化内存池
         spawnPool._perPrefabPoolOptions.Add(refabPool);
         spawnPool.CreatePrefabPool(spawnPool._perPrefabPoolOptions[spawnPool.Count]);
     }
 }
Пример #7
0
        public void InitBuffTipsViewPool()
        {
            _buffTipsDic.Clear();
            if (!_buffTipsViewPool)
            {
                GameObject go = new GameObject(POOL_NAME);
                _buffTipsViewPool = go.transform;
                _buffTipsViewPool.SetParent(UI.UIMgr.instance.basicCanvas.transform, false);
                //create _spawnPoll
                _spawnPool = PoolController.instance.CreatePool(POOL_NAME, BuffTipsView.PREFAB_PATH, true);
                _spawnPool.matchPoolScale = true;

                _prefab     = ResMgr.instance.Load <GameObject>(BuffTipsView.PREFAB_PATH);
                _prefabPool = new PrefabPool(_prefab.transform);
                _prefabPool.preloadAmount  = 5;    //默认初始化5个Prefab
                _prefabPool.limitInstances = true; //开启限制
                _prefabPool.limitFIFO      = true; //开启无限取Prefab
                _prefabPool.limitAmount    = 20;   //限制池子里最大的Prefab数量
                _prefabPool.preloadTime    = true; //开启预加载
                _prefabPool.preloadFrames  = 2;    //每帧加载个数
                _prefabPool.preloadDelay   = 2;    //延迟几秒开始预加载
                _prefabPool.cullDespawned  = true; //开启自动清理
                _prefabPool.cullAbove      = 5;    //缓存池自动清理,但是始终保存几个对象不清理
                _prefabPool.cullDelay      = 10;   //每过多久执行一次清理(销毁),单位秒
                _prefabPool.cullMaxPerPass = 2;    //每次自动清理个数
                //初始化内存池
                //_spawnPool._perPrefabPoolOptions.Add(_prefabPool);
                _spawnPool.CreatePrefabPool(_prefabPool);
            }
        }
Пример #8
0
        /// <summary>
        /// 初始化单一对象池子,并设置默认属性
        /// </summary>
        /// <param name="prefab"></param>
        private void InitPrefabPool(Transform prefab)
        {
            if (_objectPool.GetPrefabPool(prefab) == null)
            {
                PrefabPool prefabPool = new PrefabPool(prefab);
                prefabPool.preloadAmount = _preloadAmount;
                prefabPool.preloadTime   = _preloadTime;
                if (_preloadTime)
                {
                    prefabPool.preloadFrames = _preloadFrames;
                    prefabPool.preloadDelay  = _preloadDelay;
                }
                prefabPool.limitInstances = _limitInstances;
                if (_limitInstances)
                {
                    prefabPool.limitAmount = _limitAmount;
                    prefabPool.limitFIFO   = _limitFIFO;
                }
                prefabPool.cullDespawned = _cullDespawned;
                if (_cullDespawned)
                {
                    prefabPool.cullAbove      = _cullAbove;
                    prefabPool.cullDelay      = _cullDelay;
                    prefabPool.cullMaxPerPass = _cullMaxPerPass;
                }
                prefabPool._logMessages = _logPoolMessage;

                _objectPool._perPrefabPoolOptions.Add(prefabPool);
                _objectPool.CreatePrefabPool(prefabPool);
            }
        }
Пример #9
0
        /// <summary>
        /// 缓存池预加载一个 Prefab
        /// </summary>
        /// <param name="pool">缓存池</param>
        /// <param name="preloadCount">预加载的实例个数</param>
        /// <param name="limitCount">缓存池实例限制</param>
        public void PreloadPrefab(SpawnPool pool, GameObject prefab, int preloadCount, int limitCount)
        {
            if (pool.GetPrefabPool(prefab.transform) != null)
            {
                Debug.LogWarning("Create A Exist Prefab Pool");
                return;
            }

            PrefabPool prefabPool = new PrefabPool(prefab.transform);

            if (limitCount > 0)
            {
                preloadCount              = Mathf.Min(preloadCount, limitCount);
                prefabPool.limitAmount    = limitCount;
                prefabPool.preloadAmount  = preloadCount;
                prefabPool.limitInstances = true;
            }
            else
            {
                prefabPool.preloadAmount  = preloadCount;
                prefabPool.limitInstances = false;
            }

            pool.CreatePrefabPool(prefabPool);
        }
Пример #10
0
 protected override void OnMainUIComplete()
 {
     base.OnMainUIComplete();
     m_IsFighting = true;
     PlayerCtrl.Instance.SetMainCityData();
     m_GameLevelId          = SceneMgr.Instance.CurGameLevelSceneId;
     m_Grade                = SceneMgr.Instance.CurGameLevelGrade;
     regionEntityList       = GameLevelRegionDBModel.Instance.GetRegionListByGameLevelId(m_GameLevelId);
     m_CurSelectRegionIndex = 0;
     EnterRegion(m_CurSelectRegionIndex);
     m_AllMonsterCount          = GameLevelMonsterDBModel.Instance.GetLevelMonsterCount(m_GameLevelId, m_Grade);
     m_AllMonsterID             = GameLevelMonsterDBModel.Instance.GetLevelAllMonsterId(m_GameLevelId, m_Grade);
     m_Pool                     = PoolManager.Pools.Create("Monster");
     m_Pool.group.parent        = null;
     m_Pool.group.localPosition = Vector3.zero;
     for (int i = 0; i < m_AllMonsterID.Length; i++)
     {
         Transform  t          = GameUtil.LoadSprite(m_AllMonsterID[i]).transform;
         PrefabPool prefabPool = new PrefabPool(t);
         prefabPool.preloadAmount  = 5;
         prefabPool.cullDespawned  = true;
         prefabPool.cullAbove      = 5;
         prefabPool.cullDelay      = 2;
         prefabPool.cullMaxPerPass = 2;
         m_Pool.CreatePrefabPool(prefabPool);
     }
     Global.Instance.CurPlayer.ToIdle(IdleType.IdleFight);
     GameLevelCtrl.Instance.CurGameLevelTotalExp  = 0;
     GameLevelCtrl.Instance.CurGameLevelTotalGold = 0;
     GameLevelCtrl.Instance.CurGameLevelKillMonsterDic.Clear();
     GameLevelCtrl.Instance.CurGameLevelGetGoodsList.Clear();
 }
Пример #11
0
    protected override void OnStart()
    {
        base.OnStart();

        AssetBundleMgr.Instance.LoadOrDownload("Download/Prefab/UIPrefab/UIOther/UITipItem.assetbundle", "UITipItem", (GameObject obj) =>
        {
            m_TipItem = obj.transform;

            m_TipPool = PoolManager.Pools.Create("TipPool");
            m_TipPool.group.parent        = transform;
            m_TipPool.group.localPosition = Vector3.zero;

            PrefabPool prefabPool    = new PrefabPool(m_TipItem);
            prefabPool.preloadAmount = 5;     //预加载数量

            prefabPool.cullDespawned  = true; //是否开启缓存池自动清理模式
            prefabPool.cullAbove      = 10;   // 缓存池自动清理 但是始终保留几个对象不清理
            prefabPool.cullDelay      = 2;    //多长时间清理一次 单位是秒
            prefabPool.cullMaxPerPass = 2;    //每次清理几个

            m_TipPool.CreatePrefabPool(prefabPool);
        });

        //m_TipItem = ResourcesMgr.Instance.Load(ResourcesMgr.ResourceType.UIOther, "UITipItem", cache: true, returnClone: false).transform;
    }
Пример #12
0
        public void CreateCharacterPool(string path, string poolName, bool forever, System.Action <SpawnPool> callBack)
        {
            ResMgr.instance.Load <GameObject>(path, (_prefab) =>
            {
                if (!_prefab)
                {
                    if (callBack != null)
                    {
                        callBack(null);
                    }
                    return;
                }
                if (ContainsPool(poolName))
                {
                    if (callBack != null)
                    {
                        callBack(GetPool(poolName));
                    }
                    return;
                }

                GameObject poolGO = new GameObject(poolName);
                poolGO.transform.SetParent(transform, false);
                SpawnPool spawnPool      = PoolManager.Pools.Create(poolName, poolGO);
                spawnPool.matchPoolScale = true;
                PrefabPool _prefabPool   = new PrefabPool(_prefab.transform);
                if (path.Contains("player/") || path.Contains("pet/"))
                {
                    _prefabPool.preloadAmount  = 2;    //默认初始化5个Prefab
                    _prefabPool.limitInstances = true; //开启限制
                    _prefabPool.limitFIFO      = true; //开启无限取Prefab
                    _prefabPool.limitAmount    = 15;   //限制池子里最大的Prefab数量
                    _prefabPool.cullAbove      = 2;    //缓存池自动清理,但是始终保存几个对象不清理
                }
                else
                {
                    _prefabPool.preloadAmount  = 1;    //默认初始化5个Prefab
                    _prefabPool.limitInstances = true; //开启限制
                    _prefabPool.limitFIFO      = true; //开启无限取Prefab
                    _prefabPool.limitAmount    = 10;   //限制池子里最大的Prefab数量
                    _prefabPool.cullAbove      = 1;    //缓存池自动清理,但是始终保存几个对象不清理
                }
                _prefabPool.preloadTime    = true;     //开启预加载
                _prefabPool.preloadFrames  = 1;        //每帧加载个数
                _prefabPool.preloadDelay   = 0;        //延迟几秒开始预加载
                _prefabPool.cullDespawned  = true;     //开启自动清理
                _prefabPool.cullDelay      = 60;       //每过多久执行一次清理(销毁),单位秒
                _prefabPool.cullMaxPerPass = 1;        //每次自动清理个数
                //初始化内存池
                //_spawnPool._perPrefabPoolOptions.Add(_prefabPool);
                spawnPool.CreatePrefabPool(_prefabPool);
                _spawnPoolDic.Add(poolName, forever);
                _pathDic.Add(poolName, path);
                if (callBack != null)
                {
                    callBack(spawnPool);
                }
            }, 0);
        }
Пример #13
0
 private void CreatePrefabPool(Transform tmp)
 {
     m_prefabPool = new PrefabPool(tmp);
     //默认初始化两个Prefab
     m_prefabPool.preloadAmount = 1;
     //初始化内存池
     m_spawnPool._perPrefabPoolOptions.Add(m_prefabPool);
     m_spawnPool.CreatePrefabPool(m_prefabPool);
 }
Пример #14
0
    //将对象放入对象池
    public void SpawnObject(string poolName, string objName, int objNumber, out SpawnPool spawnPool)
    {
        spawnPool = PoolManager.Pools [poolName];
        PrefabPool prefabPool = new PrefabPool(Resources.Load <Transform> (objName));

        prefabPool.preloadAmount = objNumber;
        spawnPool._perPrefabPoolOptions.Add(prefabPool);
        spawnPool.CreatePrefabPool(spawnPool._perPrefabPoolOptions[spawnPool.Count]);
    }
Пример #15
0
    private void InsertPool(SpawnPool pool, GameObject obj)
    {
        PrefabPool prefabPool = new PrefabPool(obj.transform);

        prefabPool.preloadAmount = 1;
        prefabPool.limitAmount   = 1;

        pool._perPrefabPoolOptions.Add(prefabPool);
        pool.CreatePrefabPool(prefabPool);
    }
Пример #16
0
 public void AddPrefabPool(string s, int amount = 5)
 {
     if (mPoolList == null || !mPoolList.Contains(s))
     {
         PrefabPool prePool = GetPrefabPool(s, amount);
         if (prePool != null)
         {
             spawnPool._perPrefabPoolOptions.Add(prePool);
             spawnPool.CreatePrefabPool(prePool);
         }
     }
 }
Пример #17
0
    public static bool CreateNewEffectPoolItem(string prefabName, System.Action call)
    {
        //Debug.LogWarning("2JW :  <color=red>Commmons Effect</color> - " + prefabName);
        if (EffectLoads.ContainsKey(prefabName))
        {
            EffectLoads[prefabName].Add(call);
            return(false);
        }

        EffectLoads.Add(prefabName, new List <System.Action>());
        EffectLoads[prefabName].Add(call);
        GameObject oriEff = null;

        if (TempOriEffectsDic.ContainsKey(prefabName))
        {
            oriEff = TempOriEffectsDic[prefabName];
        }
        else
        {
            oriEff = ResourceMgr.Load(string.Format("Effect/_Common/{0}", prefabName)) as GameObject;

            if (oriEff == null)
            {
                Debug.LogWarning("2JW : not effect <color=red>Commmons Effect</color> - " + prefabName + " : " + oriEff, oriEff);
                EffectLoads[prefabName].Clear();
                EffectLoads.Remove(prefabName);
                return(false);
            }
            //Debug.LogWarning("2JW : " + oriEff);
            TempOriEffectsDic.Add(prefabName, oriEff);
        }
        //AssetbundleLoader.GetEffect(prefabName, (obj) =>
        {
            //Debug.LogWarning("2JW : " + _GameInfo);
            //Debug.LogWarning("2JW : " + _GameInfo.effectPool);
            //CreatePoolItem(_GameInfo.effectPool, oriEff);

            PrefabPool prefabPool = new PrefabPool(((GameObject)oriEff).transform);
            prefabPool.preloadAmount = 1;
            prefabPool.AddSpawnCount = 3;
            effectPool.CreatePrefabPool(prefabPool, true);

            for (int i = 0; i < EffectLoads[prefabName].Count; i++)
            {
                EffectLoads[prefabName][i]();
            }

            EffectLoads[prefabName].Clear();
            EffectLoads.Remove(prefabName);
        }//, false);

        return(false);
    }
Пример #18
0
    private void InitializeFloatPanelPoolManager()
    {
        SpawnPool spawnPool = PoolManager.Pools["MessageBox"];

        PrefabPool floatPanelPool = new PrefabPool(PanelManager.FloatPanel.GetPanel());

        floatPanelPool.preloadAmount = 3;

        floatPanelPool.limitInstances = true;
        floatPanelPool.limitAmount    = 3;

        spawnPool.CreatePrefabPool(floatPanelPool);
    }
Пример #19
0
    //注册
    public void Regist(string InName, Transform NewObj)
    {
        PrefabPool ReturnPool = new PrefabPool();

        if (!GamePool.prefabPools.TryGetValue(InName, out ReturnPool) && NewObj != null)
        {
            ReturnPool = null;
            ReturnPool = new PrefabPool(NewObj.transform);
            ReturnPool.cullDespawned = true;
            ReturnPool.cullDelay     = 5;
            GamePool.CreatePrefabPool(ReturnPool);
        }
    }
Пример #20
0
    private void InitializeMessageBoxPoolManager()
    {
        SpawnPool spawnPool = PoolManager.Pools.Create("UIRoot/MessageBox");

        PrefabPool messageboxPool = new PrefabPool(PanelManager.MessageBox.GetPanel());

        messageboxPool.preloadAmount = 1;

        messageboxPool.limitInstances = true;
        messageboxPool.limitAmount    = 1;

        spawnPool.CreatePrefabPool(messageboxPool);
    }
Пример #21
0
    /// <summary>
    /// 创建预设体对象池接口
    /// </summary>
    /// <param name="prefabTrans">预设体Transform</param>
    /// <param name="preloadAmount">预先加载对象数量</param>
    /// <returns></returns>
    public PrefabPool CreatePrefabPool(string spawnPoolName, Transform prefabTrans, int preloadAmount, System.Type type = null)
    {
        m_spawnPool = PoolManager.Pools[spawnPoolName];
        PrefabPool prefabPool = new PrefabPool(prefabTrans);

        prefabPool.preloadAmount  = preloadAmount;
        prefabPool.preloadTime    = false;
        prefabPool.limitInstances = true;
        prefabPool.limitAmount    = 200;
        prefabPool.scriptType     = type;
        m_spawnPool._perPrefabPoolOptions.Add(prefabPool);
        m_spawnPool.CreatePrefabPool(m_spawnPool._perPrefabPoolOptions[m_spawnPool._perPrefabPoolOptions.Count - 1]);
        return(prefabPool);
    }
Пример #22
0
    public void CreatePoolChildrenGo(string _poolName, Transform _childenPrefab, CPoolChildrenData _poolChildrenData = null)
    {
        SpawnPool spawnPool = GetPool(_poolName);

        if (spawnPool == null)
        {
            return;
        }

        PrefabPool refabPool = new PrefabPool(_childenPrefab);

        if (!spawnPool._perPrefabPoolOptions.Contains(refabPool))
        {
            refabPool = new PrefabPool(_childenPrefab);

            //预先实例化个数
            refabPool.preloadAmount = 20;

            //开启限制
            refabPool.limitInstances = true;

            //关闭无限取Prefab
            refabPool.limitFIFO = false;//如果我们限制了缓存池里面只能有10个Prefab,如果不勾选它,那么你拿第11个的时候就会返回null。如果勾选它在取第11个的时候他会返回给你前10个里最不常用的那个。

            //限制池子里最大的Prefab数量
            refabPool.limitAmount = 50;

            //开启自动清理池子
            refabPool.cullDespawned = true;

            //最终保留
            refabPool.cullAbove = 20;

            //多久清理一次
            refabPool.cullDelay = 5;

            //每次清理几个
            refabPool.cullMaxPerPass = 5;

            //初始化内存池
            spawnPool._perPrefabPoolOptions.Add(refabPool);

            //spawnPool.CreatePrefabPool(spawnPool._perPrefabPoolOptions[spawnPool.Count]);

            for (int i = 0; i < spawnPool._perPrefabPoolOptions.Count; i++)
            {
                spawnPool.CreatePrefabPool(spawnPool._perPrefabPoolOptions[i]);
            }
        }
    }
Пример #23
0
        public PrefabPool AddPrefabPool(Transform poolItem)
        {
            PrefabPool prefabPool = mSpawnPool.GetPrefabPool(poolItem.gameObject);

            if (prefabPool != null)
            {
                return(prefabPool);
            }
            //TODO SpawnPool Settings...
            prefabPool = new PrefabPool(poolItem);
            //TODO PrefabPool Settings...
            mSpawnPool.CreatePrefabPool(prefabPool);
            return(prefabPool);
        }
Пример #24
0
    //创建bulletPool
    void GenerateBulletPool()
    {
        bulletSpawnPool = PoolManager.Pools.Create(bulletPool);
        bulletSpawnPool.group.parent = transform;
        bossBulletInfo = Game.Instance.StaticData.bossBulletList;
        foreach (BulletInfo info in bossBulletInfo)
        {
            PrefabPool prefabPool = new PrefabPool(info.Prefab.transform);
            if (info.Prefab.name == "BubbleBossBullet")
            {
                PoolSetting(prefabPool, 50);
            }
            bulletSpawnPool.CreatePrefabPool(prefabPool);
        }

        playerBulletInfo = Game.Instance.StaticData.playerBulletList;
        foreach (BulletInfo info in playerBulletInfo)
        {
            PrefabPool prefabPool = new PrefabPool(info.Prefab.transform);
            if (info.Prefab.name == "PlayerBullet")
            {
                PoolSetting(prefabPool, 30);
            }
            bulletSpawnPool.CreatePrefabPool(prefabPool);
        }

        enemyBulletInfo = Game.Instance.StaticData.enemyBulletList;
        foreach (BulletInfo info in enemyBulletInfo)
        {
            PrefabPool prefabPool = new PrefabPool(info.Prefab.transform);
            if (info.Prefab.name == "EnemyBubbleMoveBullet")
            {
                PoolSetting(prefabPool, 50);
            }
            bulletSpawnPool.CreatePrefabPool(prefabPool);
        }
    }
Пример #25
0
    // Use this for initialization
    void Awake()
    {
        tf         = transform;
        headSprRdr = tf.GetComponent <SpriteRenderer>();

        _pool = GlobalController.instance.getCurPool();
        pp    = new PrefabPool(GlobalController.instance.prefabSetting.tail);
        _pool.CreatePrefabPool(pp);
        pp.preloadAmount  = 5;
        pp.limitInstances = false;

        _tailList = new List <Transform>();
        tailIdx   = new List <Coord>();
        _isDead   = false;
    }
Пример #26
0
    public PathologicalGames.SpawnPool getCurPool()
    {
        if (_pool != null)
        {
            return(_pool);
        }

        _pool = gameObject.AddComponent <SpawnPool>();
        PrefabPool pp = new PrefabPool(GlobalController.instance.prefabSetting.bullet);

        _pool.CreatePrefabPool(pp);
        pp.preloadAmount  = 10;
        pp.limitInstances = false;
        return(_pool);
    }
Пример #27
0
    /// <summary>
    /// 播放特效
    /// </summary>
    /// <param name="effectName"></param>
    public void PlayEffect(string effectPath, string effectName, System.Action <Transform> onComplete)
    {
        if (m_EffectPool == null)
        {
            return;
        }
        if (!m_EffectDic.ContainsKey(effectName))
        {
            AssetBundleMgr.Instance.LoadOrDownload(effectPath + ".assetbundle", effectName,
                                                   (GameObject obj) =>
            {
                if (!m_EffectDic.ContainsKey(effectName))
                {
                    //如果特效没有播放过
                    m_EffectDic[effectName] = obj.transform;

                    PrefabPool prefabPool    = new PrefabPool(m_EffectDic[effectName]);
                    prefabPool.preloadAmount = 0;     //预加载数量

                    prefabPool.cullDespawned  = true; //是否开启缓存池自动清理模式
                    prefabPool.cullAbove      = 5;    // 缓存池自动清理 但是始终保留几个对象不清理
                    prefabPool.cullDelay      = 2;    //多长时间清理一次 单位是秒
                    prefabPool.cullMaxPerPass = 2;    //每次清理几个

                    m_EffectPool.CreatePrefabPool(prefabPool);

                    if (onComplete != null)
                    {
                        onComplete(m_EffectPool.Spawn(m_EffectDic[effectName]));
                    }
                }
                else
                {
                    if (onComplete != null)
                    {
                        onComplete(m_EffectPool.Spawn(m_EffectDic[effectName]));
                    }
                }
            });
        }
        else
        {
            if (onComplete != null)
            {
                onComplete(m_EffectPool.Spawn(m_EffectDic[effectName]));
            }
        }
    }
Пример #28
0
 public void InitPrefabPool(string path, Transform prefab, int preloadAmount = 1, int limitAmount = 50, int cullAbove = 5, int cullMaxPerPass = 5)
 {
     if (!Contains(path))
     {
         PrefabPool pool = new PrefabPool(prefab);
         pool.name           = path;
         pool.preloadAmount  = preloadAmount;  // 预加载个数
         pool.limitInstances = true;           // 是否限制
         pool.limitFIFO      = true;           // 关闭无限取prefab
         pool.limitAmount    = limitAmount;    // 限制池子里最大的Prefab数量
         pool.cullDespawned  = true;           // 自动清除缓冲池
         pool.cullAbove      = cullAbove;      // 最终保留
         pool.cullDelay      = 10;             // 多久清理一次
         pool.cullMaxPerPass = cullMaxPerPass; // 每次清理几个
         prefabPool.CreatePrefabPool(pool);
     }
 }
Пример #29
0
    public static void SingletonPrefabPool(SpawnPool spawnPool, Object obj)
    {
        GameObject prefab     = (GameObject)obj;
        PrefabPool prefabPool = new PrefabPool(prefab.transform);

        prefabPool.preloadAmount  = 1;                  // default initialize one prefab
        prefabPool.limitInstances = false;              // open limit
        prefabPool.limitFIFO      = false;              // close infinite clone prefab
        prefabPool.limitAmount    = 1;                  // limit max prefab in pool
        prefabPool.cullDespawned  = true;               // open auto despawn mode
        prefabPool.cullAbove      = 1;                  // how many prefabs finally keeped
        prefabPool.cullDelay      = 5;                  // how long to clean once
        prefabPool.cullMaxPerPass = 5;                  // how many to clean every time

        spawnPool._perPrefabPoolOptions.Add(prefabPool);
        spawnPool.CreatePrefabPool(prefabPool);
    }
Пример #30
0
    static void CreatePoolItem(SpawnPool targetPool, object obj)
    {
        //Debug.LogWarning("2JW : CreatePoolItem In TargetPool - " + targetPool, targetPool);
        if (obj == null)
        {
            Debug.LogWarning("2JW : CreatePoolItem In obj - " + obj); return;
        }
        PrefabPool prefabPool = new PrefabPool(((GameObject)obj).transform);

        prefabPool.preloadAmount = 1;
        prefabPool.AddSpawnCount = 3;
        targetPool.CreatePrefabPool(prefabPool, true);

        //#if DEBUG
        //Debug.Log("CreatePoolItem " + ((GameObject)obj).name);
        //#endif
    }