unity3D学习【功能实现】之八:对象池讲学习二
来源:互联网 发布:消防大数据平台 编辑:程序博客网 时间:2024/06/04 01:19
第二部分:
1,首先这个 类Gmpool里面都是静态函数static,方便全局调用。
2,这个类有两个函数,就是两个功能,第一个就是创建和拿gameobject并SetActive (true);,第二个是把gameobject放到里面并SetActive (false);
public class Gmpool : MonoBehaviour {
public static Dictionary <string,ArrayList> dic = new Dictionary<string, ArrayList> ();
public static GameObject getObj(string prefabName,Vector3 position,Quaternion rotation){
go=(GameObject)Instantiate (Resources.Load("prefabs/"+prefabName),position,rotation);
return go; //注意预制体要放在 Resources/prefabs目录下,我的图片有显示 getObj()拿object,函数后面会扩展
}
先写这么个简单的。这个Dictionary是字典功能,可以去前面章节学习下,是用来存我们不用的gameobject也就是g.SetActive (false)的物体。
然后这么一个简单的函数在 Gmmanager那边调用,会发生什么事情呢。
public class Gmmanager : MonoBehaviour {
void Update () {
if(Input.GetMouseButtonDown(0)){
Gmpool.getObj("Cube",transform.position,transform.rotation);
}
}
}
发生的事情就是和对象池讲解一里的一样,点下鼠标左键发射一个物体,物体一会自己摧毁。既然一样的话就没有什么卵用啊,所以发射后不能让他摧毁,让他不见也就是 SetActive (false);。所以先来到物体自身的代码
cubeForce。public class cubeForce : MonoBehaviour {
public float mforce;
void Start () {
GetComponent<Rigidbody>().AddForce (Vector3.forward*mforce);
}
IEnumerator AutoHide()
{
yield return new WaitForSeconds(2f);
Gmpool.returnObj (this.transform.gameObject);
}
void Update(){
StartCoroutine(AutoHide());
}
}
物体自身就做这么一件事,开始一个协程,2秒后来到 Gmpool.returnObj这个函数。好了,我们继续来到Gmpool这个类。看下returnObj的代码
public static GameObject returnObj(GameObject g){
string key = g.name;
if (dic.ContainsKey (key)) {//先判断有没有这个名称的key值,也就是Cube(Clone)
dic [key].Add (g);//然后把物体装进去,其实确切的意思应该是让dic [key]对应的数组元素指向g
} else {
dic [key] = new ArrayList (){ g};//这个就是没有Cube(Clone)这个名字就建一个,在g装进去
}
g.SetActive (false);//把物体变不见
return g;
}
///////////////////////////////////////////////////////////////////
这样就完成了什么功能的,就是鼠标点击一下,发射一个方块,然后过两秒方块消失---同时装到或者说藏到了 dic[key]里面,也就是dic[Cube(Clone)]里面。
所以还有一个重要问题没有解决,就是不停的点击鼠标不停的新建出方块,那么内存也就不停的在消耗,所以应该创建方块的时候先判断dic[key]里面有没有现成的方块,有的话取出就可以了,除非没有,那只能Instantiate新建了。所以继续回到Gmpool类的这里函数getObj()。
GameObject go;
string gameObjname=prefabName+"(Clone)";//prefabName传进来的参数是Cube,要组合下
if (dic.ContainsKey (gameObjname) && dic[gameObjname].Count > 0) {
Debug.Log ("有Cube字和有数组了");//主要是判断Count>0,说明有藏东西的了
//returnObj之后有数组了,g.SetActive (false)了
ArrayList tempList= dic[gameObjname];//把东西先赋值给tempList这个临时变量
go = (GameObject)tempList [0];//把藏的第一个物体取出来,赋值给go这个临时变量
tempList.RemoveAt (0);//tempList里面的第一个元素移除调,那么之后tempList第一个可能有元素可能没元素了
go.SetActive (true);//让物体显示出来
go.transform.position = position;
go.transform.rotation = rotation;
} else {
Debug.Log("什么都没有");
go=(GameObject)Instantiate (Resources.Load("prefabs/"+prefabName),position,rotation);
}
return go;
////////////////////////////////////////////////////////////////
这样就是这个对象池的整个顺序逻辑了。那么搞清楚之后,就可以自己加工了,比如什么时候getObj(),什么时候returnObj()。都可以由自己设计。
第三部分:
链接:http://pan.baidu.com/s/1slcQGZN 密码:gwr9
1,首先这个 类Gmpool里面都是静态函数static,方便全局调用。
2,这个类有两个函数,就是两个功能,第一个就是创建和拿gameobject并SetActive
public
}
发生的事情就是和对象池讲解一里的一样,点下鼠标左键发射一个物体,物体一会自己摧毁。既然一样的话就没有什么卵用啊,所以发射后不能让他摧毁,让他不见也就是
cubeForce。public
}
public
///////////////////////////////////////////////////////////////////
这样就完成了什么功能的,就是鼠标点击一下,发射一个方块,然后过两秒方块消失---同时装到或者说藏到了 dic[key]里面,也就是dic[Cube(Clone)]里面。
所以还有一个重要问题没有解决,就是不停的点击鼠标不停的新建出方块,那么内存也就不停的在消耗,所以应该创建方块的时候先判断dic[key]里面有没有现成的方块,有的话取出就可以了,除非没有,那只能Instantiate新建了。所以继续回到Gmpool类的这里函数getObj()。
////////////////////////////////////////////////////////////////
这样就是这个对象池的整个顺序逻辑了。那么搞清楚之后,就可以自己加工了,比如什么时候getObj(),什么时候returnObj()。都可以由自己设计。
第三部分:
链接:http://pan.baidu.com/s/1slcQGZN 密码:gwr9
0 0
- unity3D学习【功能实现】之八:对象池讲学习二
- unity3D学习【功能实现】之八:对象池学习一
- [原创]unity3D学习【功能实现】之二:图片的旋转/2d物体的旋转
- Unity3D 学习日记(八) DoTween学习笔记之Tweener(二)
- unity3D学习【功能实现】之九:鼠标拖动图片
- [原创]unity3D学习【功能实现】之三:实例化
- unity3D学习之API_GameObject 对象
- 《面向对象基础:C++实现》学习笔记之八
- [原创]unity3D学习【功能实现】之七:Animator动画以及传递参数,简单功能
- Unity3D学习之获取游戏对象
- Servlet学习之二实现简单的登录功能
- 我的Unity3D学习之旅二
- unity3D学习笔记之二:Stats面板
- Unity3D学习 愤怒的小鸟之小鸟动画(八)
- ActionScript 3.0 学习(八) AS3 简单的缓存功能实现之SharedObject类
- Unity3d之ScrollView实现图片浏览切换功能----折磨的学习
- unity3D学习【功能实现】之四:滚动文字显示,类似公告面板
- unity3D学习【功能实现】之十:关卡制作scroll rect应用以及一些代码
- [原创]unity教程之2048游戏03
- coderforces 702C Cellular Network(二分)
- [原创]unity3D学习【功能实现】之七:Animator动画以及传递参数,简单功能
- 【转载】C#中Dictionary的作用及用…
- unity3D学习【功能实现】之八:对象池学习一
- unity3D学习【功能实现】之八:对象池讲学习二
- 第六周 进程的描述和进程的创建
- MyEclipse个性化代码注释模板
- unity3D学习【功能实现】之九:鼠标拖动图片
- unity3D学习【功能实现】之十:关卡制作scroll rect应用以及一些代码
- 代码调试
- MySQL开启general_log跟踪数据
- 【转载】【Unity插件】LitJson杂谈
- [原创]Json学习--litjson的生成和…