对象池应用在unity中能减少资源消耗,节省内存空间具体原理不再赘述.

以下是他的操作步骤:(注意:对象池中应用到了栈或对队列!)

1).先建立一个(怪物)物体   mMonster;

2).再建立一个对象池  private Stack<GameObject> monsterPool

:先进后出,后进先出,水杯结构   常用方法:  .peek()---->获取栈顶元素

.pop()------->出栈,弹栈

.push()------>压栈,进栈

队列:先进先出,后进后出,水管结构 常用方法: .peek()------------->获取队头元素

.Dequeue()-------->移除队头

.Enqueue()--------->移除队头

3).再建立一个池子,用来存放激活过的(怪物)物体,作用是用来判断场景中有多少个激活的物体,再让最近激活(栈)(或最开始激活(队列))的对象给失活;

4).在Start/Awake函数中将两个对象池赋初值(new一下);

5).创建一个返回值为(怪物)物体的方法,里面进行判断对象池中是否存在所需物体,如果对象池为空,就实例化一个(先不将其加入对象池),否则就直接拿出对象池中所需的物体

6).创建一个方法,当该(怪物)物体失活(SetActive(Fasle)),将其加入到对象池所在物体的旗下( monster.transform.SetParent(transform);),并将其加入到对象池中,以便下次再用!

代码参上:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class MySimpleFactory : MonoBehaviour {
public GameObject mMonster;
private Stack<GameObject> monsterPool;
private Stack<GameObject> SetActiveMonsterPool; void Start ()
{
monsterPool = new Stack<GameObject>();
SetActiveMonsterPool = new Stack<GameObject>();
}
void Update ()
{
if (Input.GetMouseButtonDown())
{
GameObject tempMonster = TakeMonster();
tempMonster.transform.position = Vector3.zero;
SetActiveMonsterPool.Push(tempMonster);
}
if (Input.GetMouseButtonDown())
{
PushThisGameObjectToMonsterPool(SetActiveMonsterPool.Pop());
}
} private GameObject TakeMonster()
{
GameObject Monster = null;
if (monsterPool.Count > )
{
Monster = monsterPool.Pop();
Monster.SetActive(true);
}
else
{
Monster = Instantiate(mMonster);
}
return Monster;
}
private void PushThisGameObjectToMonsterPool(GameObject xt)
{
xt.transform.SetParent(gameObject.transform);
xt.SetActive(false);
monsterPool.Push(xt);
}
}

对象池----unity中应用的更多相关文章

  1. Unity实现简单的对象池

    一.简介 先说说为什么要使用对象池 在Unity游戏运行时,经常需要生成一些物体,例如子弹.敌人等.虽然Unity中有Instantiate()方法可以使用,但是在某些情况下并不高效.特别是对于那些需 ...

  2. Java中的对象池技术

    java中的对象池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复重复创建相等变量时节省了很多时间.对象池其实也就是一个内存 ...

  3. Java 中的对象池实现

    点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 最近在 ...

  4. simple_pool对象池——优化&lt;二&gt;

    本文章由cartzhang编写.转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/55051570 作者:car ...

  5. Java之对象池

    单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...

  6. 理解ECS的概念和Unity中的ECS设计

    组合优于继承 ecs的概念很早就有了,最初的主要目的应该还是为了改善设计. e-c-s三者都有其意义,e-c是组合优于继承,主要用以改善oo的继承耦合过重以及多继承菱形问题. oop常见设计里,每个g ...

  7. Java 基础 - 对象池

    对象池  优点:  防止过多的创建对象合理利用对象, 缺点: 会有线程阻塞 Demo 测试代码 package com.cjcx.pay.obj; import java.util.Enumerati ...

  8. Java对象池

    单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...

  9. Java对象池示例

    单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...

随机推荐

  1. Spring 将请求参数封装成对象

    简单描述:最近手里的模块,前后台之间需要传递很多的参数,使用封装的PageData,来获取请求参数的,作微服务迁移的时候,就涉及到需要把参数从pagedata里取出来,一个一个的放到对象的属性中.就很 ...

  2. 两个fragment之间简单的跳转

    1.在第一个fragment中开启事务,设置标记 Toast.makeText(getActivity(), "切换到下一个fragment中", Toast.LENGTH_SHO ...

  3. Swift 编译时间优化

    在Xcode中直接看到编译项目的时间 step1:关闭Xcode step2:打开终端执行defaults write com.apple.dt.Xcode ShowBuildOperationDur ...

  4. C#应用编程小例子-01-渐显的窗体

    C#应用编程小例子-01-渐显的窗体 using System; using System.Windows.Forms; namespace WindowsFormsApp2 { public par ...

  5. cmake编译opencv时指定cuda版本

    之前有网友提问说,基于cmake编译时如果切换cuda版本,比如我同时装了cuda8和cuda9,opencv总是找到cuda9,我想用cuda8怎么办?实际上,手头上要配置的工程是基于opencv3 ...

  6. 物联网框架ServerSuperIO.Core(.netcore)跨平台,一套设备驱动通吃嵌入式、上位机、云服务

    1.      概述... 2 2.      ServerSuperIO.Core跨平台开发环境... 2 3.      ServerSuperIO.Core特点... 2 4.      Ser ...

  7. 公众号用户发送消息后台PHP回复没有反应的解决办法

    1.问题:微信公众平台官方提供下载的示例代码中,使用$postStr =$GLOBALS["HTTP_RAW_POST_DATA"];来获取微信服务器推送的消息数据.但是有的开发者 ...

  8. 2018-2019-2 20165239其米仁增《网络对抗》Exp1 PC平台逆向破解

    一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌握反汇编与十六进制编程器 (0.5分) 3.能正确修改机器指令改变程序执行流程(0.5分) 4.能 ...

  9. 学习使人快乐7--Mail收发原理+计划

    本篇了解邮件收发的原理与机制(smtp,pop3协议).不打算作重点学习辣~~~~~~~~~~~~~~~~ 日常感谢大佬gacl 另:打算把每周计划学的东西发在blog上面,勉励一下本咸鱼本周计划:1 ...

  10. TextBox使用技巧--转载

    [转载出处注明:http://tieba.baidu.com/p/3677706825] 在使用Visual Basic开发应用程序时,TextBox控件是最常用的(特别对于数据库程序),以下是笔者在 ...