对象池的简单使用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DemoPool : MonoBehaviour {
    //要实例的物体
    public GameObject monsterPrefab;
    //存放物体的对象池 未激活
    private List<GameObject> monsterList = new List<GameObject>();
    //激活
    private List<GameObject> monsterActiveList = new List<GameObject>();
    //父物体的位置
    public Transform[] parentPosition;

	void Start () {

        //初始化生成3个物体
        for (int i = 0; i < 3; i++)
        {
            GameObject temp = Instantiate(monsterPrefab);
            temp.transform.SetParent(parentPosition[i], false);
            //设置激活状态  添加到未激活的List 中
            temp.SetActive(false);
            monsterList.Add(temp);
        }
	}

	// Update is called once per frame
	void Update () {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            ShowMonsterState();
        }
        if (Input.GetKeyDown(KeyCode.Q))
        {
            RecycleInitMonster();
        }
	}
    /// <summary>
    /// 拿到第0位 从未激活的List中移除
    /// </summary>
    private void ShowMonsterState()
    {
        if (monsterList.Count > 0)
        {
            GameObject temp = monsterList[0];
            temp.SetActive(true);
            monsterList.RemoveAt(0);
            //添加到激活的List 中
            monsterActiveList.Add(temp);
        }
        else
        {
            //如果对象池中的个数不够 就实例化 添加到激活的List 中
            GameObject temp = Instantiate(monsterPrefab);
            monsterActiveList.Add(temp);
        }
    }
    private void RecycleInitMonster()
    {
        if (monsterActiveList.Count > 0)
        {
            GameObject temp = monsterActiveList[0];
            monsterActiveList.RemoveAt(0);
            temp.SetActive(false);
            monsterList.Add(temp);
        }
    }

}

  

原文地址:https://www.cnblogs.com/zhaodadan/p/10236369.html

时间: 2025-01-13 01:37:56

对象池的简单使用的相关文章

对象池的简单实现

1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class GameInstatie : MonoBehaviour { 6 7 private Stack<GameObject> GameManager = new Stack<GameObject>();//未激活怪我的对象池 8 private Stack<GameObject&

对象池ObjectPool的简单实现

我对对象池的简单理解:当一个游戏需要产生大量游戏物体又需要频繁销毁时,可用一个对象池将游戏物体存储起来.目的是优化内存. 以下两篇我参考过觉得OK的博文: https://blog.csdn.net/u013236878/article/details/52443066 https://www.jianshu.com/p/6133fb7e0819 unity内简单实现一下: 1.canvas下新建空物体命名为07_ObjectPool,新建一个cube 2.创建一个脚本,内容如下,挂载在空物体上

C++实现简单的对象池

对象池的实现其实是非常简单的 思想也是很简单的: 用一个队列来存放所有的对象,需要时get一个对象,从队列头取一个对象,当用完后,重新将该对象投入到队列尾部. #ifndef OBJ_POOL_H_ #define OBJ_POOL_H_ #include <queue> #include <memory> #include <stdexcept> using std::queue; using std::shared_ptr; template <typenam

对象池实现分析

对象池实现分析 什么是对象池技术?对象池应用在哪些地方? 对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象,类似线程池的概念.对象池缓存了一些已经创建好的对象,避免需要时才创建对象,同时限制了实例的个数.池化技术最终要的就是重复的使用池内已经创建的对象.从上面的内容就可以看出对象池适用于以下几个场景: 创建对象的开销大 会创建大量的实例 限制一些资源的使用 如果创建一个对象的开销特别大,那么提前创建一些可以使用的并且缓存起来(池化技术就是重复使用对象,提前创建并缓存起来重复使用就是池化

屏幕坐标和世界坐标的转换+对象池技术(3D打地鼠小游戏)

游戏中可能经常会遇到需要某个物体跟着鼠标移动,然后又需要把物体放在某个鼠标指定的位置 实现方式 Camera.main.WorldToScreenPoint Camera.main.ScreenToWorldPoint 3D打地鼠实例 我这里用到的素材都比较简陋,几乎全是用Unity做的 首先是锤子 就是两个Cylinder,在把手的位置放一个空物体用于模拟锤子的动作,命名为Hammer,把锤子作为Hammer的子物体,给Hammer添加Animation动画: 在三个关键帧位置设置Hammer

深度剖析C++对象池自动回收技术实现

http://www.tuicool.com/articles/mQBfQfN 对象池可以显著提高性能,如果一个对象的创建非常耗时或非常昂贵,频繁去创建的话会非常低效.对象池通过对象复用的方式来避免重复创建对象,它会事先创建一定数量的对象放到池中,当用户需要创建对象的时候,直接从对象池中获取即可,用完对象之后再放回到对象池中,以便复用.这种方式避免了重复创建耗时或耗资源的大对象,大幅提高了程序性能.本文将探讨对象池的技术特性以及源码实现. 对象池类图 ObjectPool:管理对象实例的pool

Unity3D中对象池的实现

在Unity中常常会遇到需要重复创建,销毁某些物体的情况,比如fps类游戏中的子弹,rpg类游戏中的小怪等等,如果直接使用Instantiate和Destroy的话,会浪费系统的资源,而使用对象池则能够节省下这些浪费. 这里使用一个重复利用子弹的进行发射的简单场景来演示对象池. 首先需要一个在场景中创建一个Cube,充当子弹. 然后在Assets目录下创建Resources文件夹,在Cube上添加上刚体,取消重力后,将Cube拖入Resources文件夹内作为一个预设,在场景中删除这个Cube.

java数据库连接池技术简单使用

JDBCDemo.java: package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.itheima.pool.MyPool; public class JDBCDemo { public static void main(String[]

Netty轻量级对象池实现分析

什么是对象池技术?对象池应用在哪些地方? 对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象,类似线程池的概念.对象池缓存了一些已经创建好的对象,避免需要时才创建对象,同时限制了实例的个数.池化技术最终要的就是重复的使用池内已经创建的对象.从上面的内容就可以看出对象池适用于以下几个场景: 创建对象的开销大 会创建大量的实例 限制一些资源的使用 如果创建一个对象的开销特别大,那么提前创建一些可以使用的并且缓存起来(池化技术就是重复使用对象,提前创建并缓存起来重复使用就是池化)可以降低创建对