0
点赞
收藏
分享

微信扫一扫

Unity3D对象池小案例

对象池的概念:在激活对象时,它从池中提取。在停用对象时,它放回池中,等待下一个请求。(来自百度);

背景:跑酷游戏,道路上有障碍物,角色身后的障碍物消失,角色前面随机生成障碍物

你所需要的最基本的三样东西:

 

1、一个池子:用来装你所需的物品,和回收物品;

2、一个取物品的方法;

3、一个放物品的方法;

有这3样东西,你就可以建造对象池了

以下是完整的代码部分,里面有详细的注释

 

[csharp] view plain copy

 

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;


  4. public class GameObjectPool : MonoBehaviour {

  5. // Use this for initialization

  6. //单例模式,如果不知道的话可以百度一下,这里不解释了,因为水平有限
  7. public static GameObjectPool instance;

  8. //下面这句是用字典构造你的池子,字典里的String就是坑的名字,每一个坑对应一个GameObject列表
  9. Dictionary<string, List<GameObject>> pool = new Dictionary<string, List<GameObject>>() { };

  10. void Start () {
  11. instance = this;//单例模式
  12. }

  13. //从池子得到物体的方法,传递两个参数,你需要得到的物体,和你需要放置的位置
  14. //你所需的物体应该已经制作成预置物体
  15. public GameObject GetPool(GameObject go,Vector3 position)
  16. {
  17. string key = go.name+"(Clone)";//要去拿东西的坑名字

  18. GameObject rongqi; //你用来取物体的容器;


  19. //下面分三种情况来分析
  20. if (pool.ContainsKey(key) && pool[key].Count > 0)//如果坑存在,坑里有东西
  21. {
  22. //直接拿走坑里面的第一个
  23. rongqi = pool[key][0];
  24. pool[key].RemoveAt(0);//把第一个位置释放;
  25. }
  26. else if (pool.ContainsKey(key) && pool[key].Count <= 0)//坑存在,坑里没东西
  27. {
  28. //那就直接初始化一个吧
  29. rongqi = Instantiate(go,position,Quaternion.identity) as GameObject;
  30. }
  31. else  //没坑
  32. {
  33. //不仅要初始化,还要把坑加上
  34. rongqi = Instantiate(go, position, Quaternion.identity) as GameObject;
  35. pool.Add(key, new List<GameObject>() { });
  36. }

  37. //调整物体初始状态
  38. rongqi.SetActive(true);

  39. //这里我加了一个子物体也显示的代码,你可以不用加
  40. foreach (Transform child in rongqi.transform)
  41. {
  42. child.gameObject.SetActive(true);
  43. }

  44. //位置初始化
  45. rongqi.transform.position = position;
  46. return rongqi;
  47. }

  48. //放入池子中的方法
  49. public void IntoPool(GameObject go)
  50. {
  51. //理论上我们的东西都是从坑里拿出来的,所以放物体进去的时候肯定有他的坑,可以直接放入,不用分情况了
  52. string key = go.name;
  53. pool[key].Add(go);
  54. go.SetActive(false);
  55. }

  56. }

举报

相关推荐

0 条评论