查看: 1791|回复: 0
打印 上一主题 下一主题

[经验分享] 游戏框架-对象池

[复制链接]
may    

8830

主题

80

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52304
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2018-12-31 21:27:12 |只看该作者 |倒序浏览

來自: 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. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-4-26 01:20 , Processed in 0.096480 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部