纳金网

标题: 游戏框架-对象池 [打印本页]

作者: may    时间: 2018-12-31 21:27
标题: 游戏框架-对象池

來自: UnityTerminator
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;

  4. public class Pool
  5. {
  6.     /// <summary>
  7.     /// 创建一个列表容器用来保存预制体对象
  8.     /// </summary>
  9.     private List<GameObject> _avaliables = new List<GameObject>();

  10.     /// <summary>
  11.     /// 生成对象的函数
  12.     /// </summary>
  13.     /// <param name="path"></param>
  14.     /// <param name="name"></param>
  15.     /// <returns></returns>
  16.     public GameObject Spawn(string path, string name)
  17.     {
  18.         GameObject go = null;
  19.         if (_avaliables.Count <= 0)
  20.         {
  21.             go = GameObject.Instantiate(Resources.Load(path + name)) as GameObject;
  22.             go.name = name;
  23.             _avaliables.Add(go);
  24.         }
  25.         else
  26.         {
  27.             go = _avaliables[0];
  28.             go.SetActive(true);
  29.             _avaliables.Remove(go);
  30.         }
  31.         return go;
  32.     }

  33.     /// <summary>
  34.     /// 回收对象的函数
  35.     /// </summary>
  36.     /// <param name="go"></param>
  37.     public void UnSpawn(GameObject go)
  38.     {
  39.         go.transform.position = new Vector3(1000, 1000, 1000);
  40.         go.SetActive(false);
  41.         _avaliables.Add(go);
  42.     }

  43.     /// <summary>
  44.     /// 清空容器内中的对象
  45.     /// </summary>
  46.     public void Clear()
  47.     {
  48.         _avaliables.Clear();
  49.     }
  50. }

  51. public class PoolManager : Singleton<PoolManager>
  52. {
  53.     private Dictionary<string, Pool> _pools = new Dictionary<string, Pool>();

  54.     /// <summary>
  55.     /// 生成预制体对象
  56.     /// </summary>
  57.     /// <param name="path"></param>
  58.     /// <param name="name"></param>
  59.     /// <returns></returns>
  60.     public GameObject Spawn(string path, string name)
  61.     {
  62.         GameObject go = null;
  63.         if (_pools.ContainsKey(name))
  64.         {
  65.             go = _pools[name].Spawn(path, name);
  66.         }
  67.         else
  68.         {
  69.             Pool pool = new Pool();
  70.             go = pool.Spawn(path, name);
  71.             _pools.Add(name, pool);
  72.         }
  73.         return go;
  74.     }

  75.     /// <summary>
  76.     /// 回收对象
  77.     /// </summary>
  78.     /// <param name="go"></param>
  79.     public void UnSpawn(GameObject go)
  80.     {
  81.         _pools[go.name].UnSpawn(go);
  82.     }

  83.     /// <summary>
  84.     /// 清空游戏对象
  85.     /// </summary>
  86.     public void Clear()
  87.     {
  88.         foreach (Pool pool in _pools.Values)
  89.         {
  90.             pool.Clear();
  91.         }
  92.     }
  93. }
复制代码





欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5