EnemyPool.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace WildAttack
  5. {
  6. /// <summary>
  7. /// 敌人池
  8. /// </summary>
  9. public class EnemyPool : Singleton<EnemyPool>, IObjectPool
  10. {
  11. #region Members
  12. private Dictionary<int, List<GameObject>> enemyObjs;
  13. private List<GameObject> enemyPfbs;
  14. private Transform poolTrans;
  15. #endregion
  16. #region Override
  17. public void Init()
  18. {
  19. poolTrans = GameObject.Find("EnemyPool").transform;
  20. enemyObjs = new Dictionary<int, List<GameObject>>();
  21. enemyObjs.Add(1, new List<GameObject>());
  22. enemyObjs.Add(2, new List<GameObject>());
  23. enemyObjs.Add(3, new List<GameObject>());
  24. enemyPfbs = new List<GameObject>();
  25. GameObject pfb1 = Resources.Load<GameObject>("Enemy/yellow/duyanguai_skin_jiandun");
  26. GameObject pfb2 = Resources.Load<GameObject>("Enemy/yellow/duyanguai_skin_fudun");
  27. GameObject pfb3 = Resources.Load<GameObject>("Enemy/yellow/duyanguai_skin_maodun");
  28. enemyPfbs.Add(pfb1);
  29. enemyPfbs.Add(pfb2);
  30. enemyPfbs.Add(pfb3);
  31. for (int i = 0; i < ProcessModule.GetInstance().processDataDic[ProcessModule.GetInstance().processDataDic.Count].monsterId.Count; i++)
  32. {
  33. GameObject enemy = GameObject.Instantiate<GameObject>(pfb1, poolTrans);
  34. enemy.SetActive(false);
  35. enemyObjs[1].Add(enemy);
  36. }
  37. for (int i = 0; i < ProcessModule.GetInstance().processDataDic[ProcessModule.GetInstance().processDataDic.Count].monsterId.Count; i++)
  38. {
  39. GameObject enemy = GameObject.Instantiate<GameObject>(pfb2, poolTrans);
  40. enemy.SetActive(false);
  41. enemyObjs[2].Add(enemy);
  42. }
  43. for (int i = 0; i < ProcessModule.GetInstance().processDataDic[ProcessModule.GetInstance().processDataDic.Count].monsterId.Count; i++)
  44. {
  45. GameObject enemy = GameObject.Instantiate<GameObject>(pfb3, poolTrans);
  46. enemy.SetActive(false);
  47. enemyObjs[3].Add(enemy);
  48. }
  49. }
  50. public GameObject GetGameObject()
  51. {
  52. return null;
  53. }
  54. public void RecycleAll()
  55. {
  56. for (int i = 0; i < poolTrans.childCount; i++)
  57. {
  58. if (poolTrans.GetChild(i).gameObject.activeSelf)
  59. {
  60. poolTrans.GetChild(i).gameObject.SetActive(false);
  61. }
  62. }
  63. }
  64. #endregion
  65. #region Functions
  66. /// <summary>
  67. /// 根据武器类型取对应obj
  68. /// </summary>
  69. /// <param name="id"></param>
  70. /// <returns></returns>
  71. public GameObject GetGameObject(int id)
  72. {
  73. GameObject enemy;
  74. for (int i = 0; i < enemyObjs[id].Count; i++)
  75. {
  76. if (!enemyObjs[id][i].activeInHierarchy)
  77. {
  78. return enemyObjs[id][i];
  79. }
  80. }
  81. enemy = GameObject.Instantiate<GameObject>(enemyPfbs[id]);
  82. enemyObjs[id].Add(enemy);
  83. return enemy;
  84. }
  85. #endregion
  86. }
  87. }