コード例 #1
0
ファイル: BulletsPool.cs プロジェクト: simonyxy/ShottingGmae
 public GameObject GetPooledObject(GunEnum Sort)                 //获取对象池中可以使用的子弹。
 {
     nowbulletType = GetWeaponType(Sort);
     for (int i = 0; i < nowbulletType.bulletObj.Count; ++i)   //把对象池遍历一遍
     {
         //这里简单优化了一下,每一次遍历都是从上一次被使用的子弹的下一个,而不是每次遍历从0开始。
         //例如上一次获取了第4个子弹,currentIndex就为5,这里从索引5开始遍历,这是一种贪心算法。
         int temI = (nowbulletType.currentIndex + i) % nowbulletType.bulletObj.Count;
         if (!nowbulletType.bulletObj[temI].activeInHierarchy) //判断该子弹是否在场景中激活。
         {
             nowbulletType.currentIndex = (temI + 1) % nowbulletType.bulletObj.Count;
             return(nowbulletType.bulletObj[temI]);             //找到没有被激活的子弹并返回
         }
     }
     //如果遍历完一遍子弹库发现没有可以用的,执行下面
     if (!lockPoolSize)                               //如果没有锁定对象池大小,创建子弹并添加到对象池中。
     {
         GameObject obj = Instantiate(nowbulletType.bullet);
         obj.transform.parent = this.transform;       //生成到buttlepool下
         nowbulletType.bulletObj.Add(obj);
         return(obj);
     }
     //如果遍历完没有而且锁定了对象池大小,返回空。
     return(null);
 }
コード例 #2
0
ファイル: BulletsPool.cs プロジェクト: simonyxy/ShottingGmae
 void InitBullet(SortOfFire bulletSort)
 {
     for (int i = 0; i < pooledAmount; ++i)
     {
         GameObject obj = Instantiate(bulletSort.bullet, this.transform); //创建子弹对象
         obj.SetActive(false);                                            //设置子弹无效
         bulletSort.bulletObj.Add(obj);                                   //把子弹添加到链表(对象池)中
     }
 }