纳金网
标题:
游戏框架-对象池
[打印本页]
作者:
may
时间:
2018-12-31 21:27
标题:
游戏框架-对象池
來自: UnityTerminator
using System;
using System.Collections.Generic;
using UnityEngine;
public class Pool
{
/// <summary>
/// 创建一个列表容器用来保存预制体对象
/// </summary>
private List<GameObject> _avaliables = new List<GameObject>();
/// <summary>
/// 生成对象的函数
/// </summary>
/// <param name="path"></param>
/// <param name="name"></param>
/// <returns></returns>
public GameObject Spawn(string path, string name)
{
GameObject go = null;
if (_avaliables.Count <= 0)
{
go = GameObject.Instantiate(Resources.Load(path + name)) as GameObject;
go.name = name;
_avaliables.Add(go);
}
else
{
go = _avaliables[0];
go.SetActive(true);
_avaliables.Remove(go);
}
return go;
}
/// <summary>
/// 回收对象的函数
/// </summary>
/// <param name="go"></param>
public void UnSpawn(GameObject go)
{
go.transform.position = new Vector3(1000, 1000, 1000);
go.SetActive(false);
_avaliables.Add(go);
}
/// <summary>
/// 清空容器内中的对象
/// </summary>
public void Clear()
{
_avaliables.Clear();
}
}
public class PoolManager : Singleton<PoolManager>
{
private Dictionary<string, Pool> _pools = new Dictionary<string, Pool>();
/// <summary>
/// 生成预制体对象
/// </summary>
/// <param name="path"></param>
/// <param name="name"></param>
/// <returns></returns>
public GameObject Spawn(string path, string name)
{
GameObject go = null;
if (_pools.ContainsKey(name))
{
go = _pools[name].Spawn(path, name);
}
else
{
Pool pool = new Pool();
go = pool.Spawn(path, name);
_pools.Add(name, pool);
}
return go;
}
/// <summary>
/// 回收对象
/// </summary>
/// <param name="go"></param>
public void UnSpawn(GameObject go)
{
_pools[go.name].UnSpawn(go);
}
/// <summary>
/// 清空游戏对象
/// </summary>
public void Clear()
{
foreach (Pool pool in _pools.Values)
{
pool.Clear();
}
}
}
复制代码
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5