unity创建一个简单对象的开销_Unity下简单对象池的创建与使用
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下简单对象池的创建与使用相关推荐
- python使用np.logspace函数在对数刻度上创建一个对数等距数组实战:在对数刻度上创建一个数组(指定数值个数以及是否包含末尾界值)、使用不同的基数(底数)在对数刻度上构建等距数组、可视化
python使用np.logspace函数在对数刻度上创建一个对数等距数组实战:在对数刻度上创建一个数组(指定数值个数以及是否包含末尾界值).使用不同的基数(底数)在对数刻度上构建等距数组.可视化 目 ...
- 利用多态特性,编程创建一个手机类Phones,定义打电话方法call()。创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法
利用多态特性,编程创建一个手机类Phones,定义打电话方法call().创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法, ...
- java创建一个不可变对象_使用不可变对象创建值对象
java创建一个不可变对象 在回答我最近的文章中AutoValue:生成的不可变的值类 , 布兰登认为,这可能是有趣的,看看如何AutoValue比较项目Lombok和Immutables和凯文借调这 ...
- 计算机创建一个用户名和密码错误,Win7家庭组如何创建共享及其密码错误怎么办?...
在Win7系统中创建家庭组共享,就能让文件资源的共享变得更加容易,那么要如何创建家庭组的共享呢?家庭组密码错误要又该如何解决?下面小编就给大家介绍下Win7创建家庭组共享和解决其密码错误的方法,一起来 ...
- python创建一个n*m的二维数组_Python中创建二维数组
Python中创建二维数组 二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩 ...
- mysql创建一个表用来快速查询表_mysql数据库的创建表格、查询(多表查询)
我们要下载Mysql数据库(可以去官网中下),然后在下载一个navicat,我们在这里面使用Mysql.等这些准备工作做完之后,我们就正式来写sql语句了. 首先:我们需要创建一个用户,然后有一个te ...
- java如何创建一个两个数的队列_java线程池 如何构建一个线程立即到拉到MAX数量跑业务,线程到MAX了,额外的队列可以存储任务的线程池...
背景:JDK的线程池的运作原理 : JDK的线程池的构造函数有7个参数,分别是corePoolSize.maximumPoolSize.keepAliveTime.unit.workQueue.thr ...
- c#如何使用反射去创建一个委托_【自学C#】|| 笔记 37 创建线程
一.Thread:线程及与线程有关的类 在 C# 语言中线程(Thread)是包含在进程中的,它位于 System.Threading 命名空间中. 与线程有关的类同样也都在 System.T ...
- java创建一个不可变对象_如何在Java中创建不可变类?
java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...
最新文章
- CornerNet代码解析——损失函数
- SQL Server基础
- BZOJ1196: [HNOI2006]公路修建问题
- Dokcer安装Redis
- Drools 5.1.1(一)
- 【直播预告 | 今天10:30】多媒体技术 PI 第一期:OSS圆桌
- linux命令数据盘分多个区,pvmove命令 – 移动物理盘区
- MobaXterm_Personal_20.1最简单方式链接阿里云服务器
- 人心散了、项目必然要败
- Vue报错'Do not use built-in or reserved HTML elements as component id:解决方法
- pyinstaller相关错误
- iconv命令与函数
- 英语在线听力翻译器_英语听力翻译app下载-英语听力翻译软件下载v1.1.3 安卓版-2265安卓网...
- 函数发生器的使用方法
- 连续分配、链接分配和索引分配详解
- 快速实现远程控制Android手机
- 嵌入式应用之UART串口
- python 批量去掉语音中的静音段
- 优课在线 实境英语作业3Unit 11-15
- angular-ng new