对象池的应用的简单Demo
2015-12-02 11:35
453 查看
<span style="font-size:18px;">对象池的简单应用</span>
using UnityEngine; using System.Collections; public class Attack : MonoBehaviour { void OnMouseDown() { //Point为发射点的空物体 GameObject o = ObjectPool.instance.GetFromPool ("Bullet", GameObject.Find ("Point").transform.position, Quaternion.identity ); o.transform.LookAt (GameObject.Find ("Wall").transform.position); o.GetComponent<Rigidbody>().AddForce(Vector3.forward * 500); } void OnTriggerStay(Collider collider) { if (collider.name == "Bullet(Clone)") { // 存之前消除速度 collider.gameObject.GetComponent <Rigidbody> ().velocity = Vector3.zero; ObjectPool.instance.ReturnPool (collider.gameObject); } } }
首先建立一个脚本ObjectPool挂载在MainCamera上接着创建一个脚本Attack脚本,挂载在一个Cube上,将Collider的isTrigger的属性勾选,创建Bullet(注意改名)预制体,并加上刚体,放在Resources文件夹下。
这样子弹进入后就加入对象池。
using UnityEngine; using System.Collections; public class Attack : MonoBehaviour { void OnMouseDown() { //Point为发射点的空物体 GameObject o = ObjectPool.instance.GetFromPool ("Bullet", GameObject.Find ("Point").transform.position, Quaternion.identity ); o.transform.LookAt (GameObject.Find ("Wall").transform.position); o.GetComponent<Rigidbody>().AddForce(Vector3.forward * 500); } void OnTriggerStay(Collider collider) { if (collider.name == "Bullet(Clone)") { // 存之前消除速度 collider.gameObject.GetComponent <Rigidbody> ().velocity = Vector3.zero; ObjectPool.instance.ReturnPool (collider.gameObject); } } }
对象池的原理就是将重复利用的资源(例如:子弹)不用时不直接销毁,而是将他的active属性设置为false。当对象池中不存在物体时,创建对象。当用完该物体时,存入对象池。下次就可直接从对象池中获取,不需要再次创建。
相关文章推荐
- case 语句匹配顺序
- XML学习笔记(一):HTML文件转成XML文件
- Http协议详解
- Listview列表收缩与展开——ExpandableListView
- 程序员为对抗雾霾可以做些什么?
- 冒泡排序&选择排序
- php分享十二:分组取前N记录
- Java编程中如何在一个数值范围内生成一个伪随机数
- Android常用的工具类下载地址及分析
- 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
- 浅谈WebLogic和Tomcat
- 关于C语言程序的内存分配的入门知识学习
- HBase的特征和优点
- Android自定义轮播图控件
- 使用android.support.design.widget.TabLayout出现java.lang.reflect.InvocationTargetException
- Android Log高级用法
- linux uniq 命令详解
- mysql防sql注入
- VS2013使用教程总结(1)---忽略安全检查
- Http请求报文和响应报文