ObjectPool

using System.Collections;using System.Collections.Generic;using UnityEngine;public class ObjectPool :SingletonByMono<ObjectPool> {    private static Dictionary<string, ArrayList> pool = new Dictionary<string, ArrayList> ();    public Object ReturnStorage(GameObject go)    {        string key = go.gameObject.name;        if(pool.ContainsKey (key))        {            pool[key].Add (go);        }        else        {            pool [key] = new ArrayList (){go};        }        go.SetActive (false);        return go;    }    public Object Get(GameObject prefab,Vector3 position,Quaternion quaternion)    {        string key = prefab.name + "(Clone)";        Object o;        if(pool.ContainsKey (key)&&pool[key].Count>0)        {            ArrayList list = pool [key];            o = list [0] as Object;            list.RemoveAt(0);            (o as GameObject).SetActive (true);            (o as GameObject).transform.position = position;            (o as GameObject).transform.rotation = quaternion;        }        else        {            o = Instantiate (prefab, position, quaternion);        }        return o;    }    public void WaitToReturn(GameObject go,float waitTime)    {        StartCoroutine (ReturnToPool(go,waitTime));    }    IEnumerator ReturnToPool(GameObject go ,float  waitTime)    {        yield return new WaitForSeconds (waitTime);        ReturnStorage (go);    }}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectPool :SingletonByMono<ObjectPool> {
	private static Dictionary<string, ArrayList> pool = new Dictionary<string, ArrayList> ();
	public Object ReturnStorage(GameObject go)
	{
		string key = go.gameObject.name;
		if(pool.ContainsKey (key))
		{
			pool[key].Add (go);
		}
		else
		{
			pool [key] = new ArrayList (){go};
		}
		go.SetActive (false);
		return go;
	}
	public Object Get(GameObject prefab,Vector3 position,Quaternion quaternion)
	{
		string key = prefab.name + "(Clone)";
		Object o;
		if(pool.ContainsKey (key)&&pool[key].Count>0)
		{
			ArrayList list = pool [key];
			o = list [0] as Object;
			list.RemoveAt(0);
			(o as GameObject).SetActive (true);
			(o as GameObject).transform.position = position;
			(o as GameObject).transform.rotation = quaternion;
		}
		else
		{
			o = Instantiate (prefab, position, quaternion);
		}
		return o;
	}
	public void WaitToReturn(GameObject go,float waitTime)
	{
		StartCoroutine (ReturnToPool(go,waitTime));
	}
	IEnumerator ReturnToPool(GameObject go ,float  waitTime)
	{
		yield return new WaitForSeconds (waitTime);
		ReturnStorage (go);
	}
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectPool :SingletonByMono<ObjectPool> {
	private static Dictionary<string, ArrayList> pool = new Dictionary<string, ArrayList> ();
	public Object ReturnStorage(GameObject go)
	{
		string key = go.gameObject.name;
		if(pool.ContainsKey (key))
		{
			pool[key].Add (go);
		}
		else
		{
			pool [key] = new ArrayList (){go};
		}
		go.SetActive (false);
		return go;
	}
	public Object Get(Vector3 position, Quaternion quaternion,GameObject prefab = null,string prefabName=null,string prefabPath=null)
	{
		string key;
		if(prefab)
		{
			key = prefab.name + "(Clone)";
		}
		else if(prefabName!=null)
		{
			key = prefabName + "(Clone)";
		}
		else
		{
			key = "";
		}
		Object o=null;
		if(pool.ContainsKey (key)&&pool[key].Count>0)
		{
			ArrayList list = pool [key];
			o = list [0] as Object;
			list.RemoveAt(0);
			(o as GameObject).SetActive (true);
			(o as GameObject).transform.position = position;
			(o as GameObject).transform.rotation = quaternion;
		}
		else
		{
			if(prefab)
			{
				o = Instantiate (prefab, position, quaternion);
			}
			else if(prefabPath!=null)
			{
				o = Instantiate (Resources.Load (prefabPath), position, quaternion);
			}
		}
		return o;
	}
	public void WaitToReturn(GameObject go,float waitTime)
	{
		StartCoroutine (ReturnToPool(go,waitTime));
	}
	IEnumerator ReturnToPool(GameObject go ,float  waitTime)
	{
		yield return new WaitForSeconds (waitTime);
		ReturnStorage (go);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值