对象池应用
来源:互联网 发布:苍云脸型数据 编辑:程序博客网 时间:2024/06/03 20:55
usingUnityEngine;
usingSystem.Collections.Generic;
usingSystem.Text;
publicenumEnemyType
{
FirstEnemy,
SecnodEnemy,
ThereEnemy,
FourEnemy,
FiveEnemy,
}
publicclassObjectPool:Singleton<ObjectPool> {
//敌人池
private Dictionary<string,List<GameObject>> mPools;
GameObject_result =null;
#regionsingleton
publicObjectPool()
{
mPools =newDictionary<string,List<GameObject>>();
}
#endregion
publicGameObjectSwpanObject(EnemyTypetype,Vector3pos,Quaternionrotation)
{
//key 是集合的主键
_result =null;
string_key = CreatEnemy(type).name.Replace("(Clone)","");
//
if(mPools.ContainsKey(_key))
{
if(mPools[_key].Count > 0)
{
_result = mPools[_key][0];
mPools[_key].Remove(_result);
if(_result)
{
_result.SetActive(true);
_result.transform.position = pos;
_result.transform.rotation = rotation;
return_result;
}
}
}
//创建一个对象
GameObject_res =GameObject.Instantiate(CreatEnemy(type), pos, rotation)asGameObject;
return_res;
}
publicGameObjectSwpanObject(GameObjecttype,Vector3pos,Quaternionrotation)
{
//key 是集合的主键
_result =null;
string_key = type.tag;
//
if(mPools.ContainsKey(_key))
{
if(mPools[_key].Count > 0)
{
_result = mPools[_key][0];
mPools[_key].Remove(_result);
if(_result)
{
_result.SetActive(true);
_result.transform.position = pos;
_result.transform.rotation = rotation;
return_result;
}
}
}
//创建一个对象
GameObject_res =GameObject.Instantiate(type, pos, rotation)asGameObject;
return_res;
}
publicGameObjectCreatEnemy(EnemyTypetype) {
StringBuilderpath =newStringBuilder();
switch(type)
{
caseEnemyType.FirstEnemy:
path.Append("Enemy/FirstEnemy");
break;
caseEnemyType.SecnodEnemy:
path.Append("Enemy/SecondEnemy");
break;
caseEnemyType.ThereEnemy:
path.Append("Enemy/ThereEnemy");
break;
caseEnemyType.FourEnemy:
path.Append("Enemy/FourEnemy");
break;
default:
break;
}
GameObjectobj =Resources.Load(path.ToString())asGameObject;
returnobj;
}
publicvoidDestoryObject(GameObjectgameObject)
{
gameObject.SetActive(false);
string_key = gameObject.name.Replace("(Clone)","");
//如果没有这个类型的集合
if(!mPools.ContainsKey(_key))
{
mPools.Add(_key,newList<GameObject>());
}
mPools[_key].Add(gameObject);
// Debug.Log("死亡");
// Destory(_key);
}
///<summary>
///死的怪物才会放池子里
///</summary>
///<param name="name"></param>
privatevoidDestory(stringname)
{
List<GameObject> _pool = new List<GameObject>();
if(Instance.mPools.Count > 0)
{
_pool = Instance.mPools[name];
}
if(_pool.Count > 3)
{
for(inti = 2; i > 0; i--)
{
GameObject.Destroy(_pool[i]);
_pool.Remove(_pool[i]);
mPools[name].Remove(mPools[name][i]);
}
}
}
}
-----------------------------------------------------------
运用
publicvoidCreatEnemy(EnemyTypetype,Transformtarget) {
mEnemy =ObjectPool.Instance.SwpanObject(type,transform.position,Quaternion.identity);
//这句话必须有 否则报错
if(mEnemy==null)
{
mEnemy =ObjectPool.Instance.CreatEnemy(type);
mEnemy =ObjectPool.Instance.SwpanObject(mEnemy, transform.position,Quaternion.identity);
}
// mEnemy.GetComponent<CharBase>().mTarTrans = target;
initLife = mEnemy;
}
阅读全文
0 0
- 对象池应用
- as3扫盲:对象池应用
- 对象池 的设计和应用
- 对象池的应用的简单Demo
- 框架的应用(一):对象池
- Unity中对象池的应用
- 对象池的应用 commom-poll GenericObjectPool
- Unity中对象池的应用
- 对象池在怪物孵化器中的应用
- ServletConfig对象,ServletContext对象应用
- 对象和对象的应用
- Connection对象的应用
- 应用域创建对象
- 对象统计分析技术应用
- DataTable对象的应用
- javascript xmlhttp 对象应用
- dom对象的应用
- APPLICATION对象应用
- android 6.0 动态权限
- atom的插件必备
- UVA
- 店铺红包的正确使用姿势
- 文本分类中的降维方法总结
- 对象池应用
- Nginx源码阅读(ngx_master_process_cycle)
- 栈应用之括号匹配
- WebRTC之channel(五)
- 目前市面上性价比最好的三模北斗定位导航模块ATGM336H
- 将彩色视频转换为灰度视频源代码
- Android官方DataBinding(三):RecyclerView 使用ViewDataBinding更新数据
- springboot集成swagger的应用
- HDU 6114