ObjectPool脚本 ()注意 此脚本不继承MonoBehaviour 否则保存到对象池不成功 为什么? 留给读者自己思考一下

usingSystem.Collections;

usingSystem.Collections.Generic;

using UnityEngine ;

public class ObjectPool{

// 创建单例

public static ObjectPool _instant ;

public static ObjectPool GetInstant()

{

if(_instant ==null)

{

_instant = new ObjectPool() ;

}

return _instant ;

}

// 对象池 就是一个字典 键是预设体的名字string类型 值是一个数组存储GameObject的数组

private Dictionary> pool ;

// 字典需要初始化 在构造方法中初始化

public ObjectPool(){

pool = new Dictionary>();

}

// 获取对象 也是判断对象池是否有这个对象

public GameObject GetObj(string objName,Vector3pos,Quaternionqua))

{

// 要获取的对象

GameObject currentObj = null ;

// 根据键去判断字典是否有这个对象 也是判断对象池中是否有

if(pool.ContainsKey(objName))

{

// 对象池中有剩余 这句话的意思是说 当我射击子弹很快很快或者需求子弹数大时 对象池存储的对象是否够 不够就重新产生且添加到对象池

if(pool[objName].count>0)

{

//获取当前的对象

currentObj = pool[objName][0] ;

//   一个对象利用完取出去后 就要移除  为啥?不是添加吗 怎么还要从对象池中移除呢 我们说了。有时候需求子弹数很大 利用过的在一定时间内就不能利用了 在后面的方法会在此添加进来

pool[objeName].Remove(currentObj) ;

}

}

// 如果对象为空 意思是第一次程序运行 还没有一个产生 或者是需求大 对象池中没有这么多 对象池就增加对象

if(currentObj==Null)

{

//实例化对象

currentObj = GameManager.instance.Load(objName) ;

// 设置好对象的位置和角度 就是子弹的位置和角度

currentObj.transform.position = pos ;

currentObj.transform.rotation = qua ;

//激活对象

currentObj.SetActive(true);

}

// 保存对象

public void SaveObj(GameObject go)

{

go.setActive(false) ;

//获取对象池名称

unity创建一个简单对象的开销_Unity下简单对象池的创建与使用相关推荐

  1. python使用np.logspace函数在对数刻度上创建一个对数等距数组实战:在对数刻度上创建一个数组(指定数值个数以及是否包含末尾界值)、使用不同的基数(底数)在对数刻度上构建等距数组、可视化

    python使用np.logspace函数在对数刻度上创建一个对数等距数组实战:在对数刻度上创建一个数组(指定数值个数以及是否包含末尾界值).使用不同的基数(底数)在对数刻度上构建等距数组.可视化 目 ...

  2. 利用多态特性,编程创建一个手机类Phones,定义打电话方法call()。创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法

    利用多态特性,编程创建一个手机类Phones,定义打电话方法call().创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法, ...

  3. java创建一个不可变对象_使用不可变对象创建值对象

    java创建一个不可变对象 在回答我最近的文章中AutoValue:生成的不可变的值类 , 布兰登认为,这可能是有趣的,看看如何AutoValue比较项目Lombok和Immutables和凯文借调这 ...

  4. 计算机创建一个用户名和密码错误,Win7家庭组如何创建共享及其密码错误怎么办?...

    在Win7系统中创建家庭组共享,就能让文件资源的共享变得更加容易,那么要如何创建家庭组的共享呢?家庭组密码错误要又该如何解决?下面小编就给大家介绍下Win7创建家庭组共享和解决其密码错误的方法,一起来 ...

  5. python创建一个n*m的二维数组_Python中创建二维数组

    Python中创建二维数组 二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩 ...

  6. mysql创建一个表用来快速查询表_mysql数据库的创建表格、查询(多表查询)

    我们要下载Mysql数据库(可以去官网中下),然后在下载一个navicat,我们在这里面使用Mysql.等这些准备工作做完之后,我们就正式来写sql语句了. 首先:我们需要创建一个用户,然后有一个te ...

  7. java如何创建一个两个数的队列_java线程池 如何构建一个线程立即到拉到MAX数量跑业务,线程到MAX了,额外的队列可以存储任务的线程池...

    背景:JDK的线程池的运作原理 : JDK的线程池的构造函数有7个参数,分别是corePoolSize.maximumPoolSize.keepAliveTime.unit.workQueue.thr ...

  8. c#如何使用反射去创建一个委托_【自学C#】|| 笔记 37 创建线程

    一.Thread:线程及与线程有关的类 在 C# 语言中线程(Thread)是包含在进程中的,它位于 System.Threading 命名空间中.     与线程有关的类同样也都在 System.T ...

  9. java创建一个不可变对象_如何在Java中创建不可变类?

    java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...

最新文章

  1. CornerNet代码解析——损失函数
  2. SQL Server基础
  3. BZOJ1196: [HNOI2006]公路修建问题
  4. Dokcer安装Redis
  5. Drools 5.1.1(一)
  6. 【直播预告 | 今天10:30】多媒体技术 PI 第一期:OSS圆桌
  7. linux命令数据盘分多个区,pvmove命令 – 移动物理盘区
  8. MobaXterm_Personal_20.1最简单方式链接阿里云服务器
  9. 人心散了、项目必然要败
  10. Vue报错'Do not use built-in or reserved HTML elements as component id:解决方法
  11. pyinstaller相关错误
  12. iconv命令与函数
  13. 英语在线听力翻译器_英语听力翻译app下载-英语听力翻译软件下载v1.1.3 安卓版-2265安卓网...
  14. 函数发生器的使用方法
  15. 连续分配、链接分配和索引分配详解
  16. 快速实现远程控制Android手机
  17. 嵌入式应用之UART串口
  18. python 批量去掉语音中的静音段
  19. 优课在线 实境英语作业3Unit 11-15
  20. angular-ng new

热门文章

  1. Minor GC、Major GC、Full GC
  2. Java8新特性之stream的详细用法
  3. BIO-NIO-AIO
  4. UNIX再学习 -- 信号
  5. 大数运算(8)——大数幂运算
  6. java要频繁调用容器时_Java最常见的200+面试题及自己梳理的答案--面试必备(一)...
  7. 基于mcat开发智能合约应用(三)编码自动化与合约交互
  8. CS231n官方笔记授权翻译总集篇发布
  9. Android 代码优化工具FindBugs
  10. 红茶一杯话Binder(ServiceManager篇)