博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity中对象池的使用
阅读量:6968 次
发布时间:2019-06-27

本文共 1888 字,大约阅读时间需要 6 分钟。

unity中用到大量重复的物体,例如发射的子弹,可以引入对象池来管理,优化内存。

对象池使用的基本思路是:

将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用。恰当地使用对象池,可以在一定程度上减少频繁创建对象所造成的开销。

并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。

代码如下所示:

1 using UnityEngine; 2 using System.Collections; 3 using System.Collections.Generic; 4  5 public class GameObjectPool : MonoBehaviour { 6     //单例模式 7     private static GameObjectPool instance; 8  9     public static GameObjectPool Instance10     {11         get { return GameObjectPool.instance; }12         set { GameObjectPool.instance = value; }13     }14 15     private static Dictionary
pool = new Dictionary
{ };16 // Use this for initialization17 void Start ()18 {19 Instance = this;20 }21 public static Object Get(string prefabName, Vector3 position, Quaternion rotation)22 {23 string key = prefabName + "(Clone)";24 Object o;25 //池中存在,则从池中取出26 if (pool.ContainsKey(key) && pool[key].Count>0)27 {28 ArrayList list=pool[key];29 o=list[0] as Object;30 list.Remove(o);31 //重新初始化相关状态32 (o as GameObject).SetActive(true);33 (o as GameObject).transform.position = position;34 (o as GameObject).transform.rotation = rotation;35 }36 //池中没有则实例化gameobejct37 else38 {39 o = Instantiate(Resources.Load(prefabName),position,rotation);40 }41 return o;42 }43 44 45 public static Object Return(GameObject o)46 {47 string key = o.name;48 if (pool.ContainsKey(key))49 {50 ArrayList list=pool[key];51 list.Add(o);52 }53 else54 {55 pool[key] = new ArrayList(){ o};56 }57 o.SetActive(false);58 return o;59 }60 }

 

转载地址:http://bussl.baihongyu.com/

你可能感兴趣的文章
javascript数组操作汇总
查看>>
静态链表
查看>>
Ubuntu 12.04中文输入法的安装
查看>>
[转] 你真的了解回流和重绘吗
查看>>
[转] babel-present-env 与 babel-polyfill 学习总结
查看>>
openstack学习(一)kvm-libvirt
查看>>
使用pytesseract识别简单验证码
查看>>
1103 Integer Factorization
查看>>
Promise 简易实现 - 面试专用
查看>>
PHP —— 读取文件到二维数组
查看>>
Mysql中select的正确姿势
查看>>
iOS block示例
查看>>
【原创】驱动加载之CreateService
查看>>
Xcode7 HTTP WARNING
查看>>
[基准测试]----lmbench
查看>>
为应用提供 64 位原生支持 | Android 中文教学视频
查看>>
【Atcoder】AGC 016 C - +/- Rectangle
查看>>
Django页面跳转但是不会显示出来???
查看>>
1056 Mice and Rice
查看>>
Socket IO与NIO(五)
查看>>