对象池的作用以及简单示例

        在游戏当中,有很多时候需要重复地创建或删除某些游戏对象,此时会耗费系统资源,从而影响性能,利用对象池可以解决这个问题。对象池能够节省内存,优化程序流畅程度。

        把对象放在一个集合里,通过集合来管理对象,不用对象的时候不要删除对象,而是放到集合里;需要对象时,先在集合里找是否有该对象,有直接使用,没有创建后使用。

        1、将一个游戏对象制作成预制体。

2、创建一个空游戏对象并挂载脚本。 

 

3、源代码

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

public class PoolTest : MonoBehaviour
{
    // Start is called before the first frame update
    //对象池管理器
    public List<GameObject> list = new List<GameObject>();
    public GameObject goPrefab;
    public int maxCount;

    //对象保存到对象池
    public void Push(GameObject go)
    {
        if(list.Count <maxCount )//对象池内的对象数量小于允许存放的最大数量,往对象池里添加对象
        {
            list.Add(go);
        }
        else//对象池满了就不再往里添加对象,而是直接删除。
        {
            Destroy(go);
        }
    }


    //从对象池中取出对象
    public GameObject Pop()
    {
        if(list.Count >0)
        {
            GameObject go = list[0];
            list.RemoveAt(0);//从对象池中删除对象
            return go;
        }
        return Instantiate(goPrefab);
    }


    //清除对象池
    public void Clear()
    {
        list.Clear();
    }

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

public class Tset : MonoBehaviour
{
    // Start is called before the first frame update
    //管理不在对象池中的对象
    private List<GameObject> list = new List<GameObject>();

    // Update is called once per frame
    void Update()
    {
        //创建
        //从对象池取出
        if (Input.GetMouseButtonDown (0))
        {
            GameObject go = GetComponent<PoolTest>().Pop();
            list.Add(go);
            go.SetActive(true);
        }

        //删除
        //放入对象池
        if(Input.GetMouseButtonDown (1))
        {
            if(list.Count >0)
            {
                GetComponent<PoolTest>().Push(list[0]);
                list[0].SetActive(false);
                list.RemoveAt(0);//从列表中移除,代表不存在与场景当中,而是存在于对象池当中
            }
        }
    }
}

4、最终效果:

按鼠标左键,会创建一个游戏对象;

按鼠标右键,会删除一个游戏对象。 

 

通过按鼠标左右键来在场景中进行游戏对象的删除和创建,但实际上,并不是真正的删除,而是将游戏对象的状态进行true/false的转变,从而达到减少系统资源消耗和优化程序流程程度的目的。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/907131.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java并发编程-volatile的作用

文章目录 volatile的作用1.改变线程间的变量可见性2.禁止指令重排序 参考的学习视频 volatile的作用 1.改变线程间的变量可见性 每个线程都有一个专用的工作集内存&#xff0c;下图里面粉色的表示专用工作集内存&#xff0c;黄色的是共享内存工作区&#xff0c;如果加入了vol…

Netty 组件介绍 - EventLoop

概要 把 channel 理解为数据的通道把 msg 理解为流动的数据&#xff0c;最开始输入是 ByteBuf&#xff0c;但经过pipeline 的加工&#xff0c;会变成其它类型对象&#xff0c;最后输出又变成 ByteBuf把 handler 理解为数据的处理工序 工序有多道&#xff0c;合在一起就是 pi…

oracle 对应的JDBC驱动 版本

下载网址&#xff1a;JDBC and UCP Downloads page

整理 【 DBeaver 数据库管理工具 】的一些基础使用

目录 连接设置切换工作空间SQL编辑器&#xff08;写sql语句&#xff09;打开方式新建查询&#xff08;sql编辑器&#xff09;打开写的 sql 查询&#xff08;项目浏览器&#xff09; 备份sql文件查看历史执行语句自动保存sql语句的文件&#xff08;编辑器&#xff09;关闭自动生…

(九)JavaWeb后端开发——Servlet

目录 1.Servlet由来 2.Servlet快速入门 3.Servlet执行原理 4.Servlet生命周期 1.Servlet由来 在JaveEE API文档中对Servlet的描述是&#xff1a;可以运行在服务器端的微小程序&#xff0c;但是实际上&#xff0c;Servlet就是一个接口&#xff0c;定义了Java类被浏览器访问…

LLC Power Switches and Resonant Tank 笔记

1.概述 上面是一个典型的LLC电路。注意Lm是励磁电感&#xff0c;就是次级线圈空载时的主变压器电感&#xff0c;据说在计算谐振频率时无需关心。然后&#xff0c;作为DCDC电源&#xff0c;它通过调整谐振频率&#xff0c;来改变输出的电流。负载越大&#xff0c;频率越低&#…

项目模块十三:Util模块

一、项目设计思路 用于之后协议使用的工具类 二、静态成员函数 1、分割函数 static size_t Split(const string &src, const string &sep, vector<string> *array) string.find(const string &str, size_t pos 0) string.substr(size_t pos 0, size_t…

Chrome与夸克谁更节省系统资源

在当今数字化时代&#xff0c;浏览器已经成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;我们都依赖于浏览器来访问互联网。然而&#xff0c;不同的浏览器在性能和资源消耗方面存在差异。本文将探讨Chrome和夸克两款浏览器在系统资源消耗方面的表现…

Qt第三课 ----------输入类的控件属性

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

后端:Spring、Spring Boot-实例化Bean依赖注入(DI)

文章目录 1. 实例化Bean2. 使用FactoryBean3. 依赖注入(DI)3.1 AutoWired 属性注入(查找顺序&#xff1a;先类型&#xff0c;后名字)3.2 AutoWired 在构造函数&参数上的使用3.3 Inject和Resource 进行依赖注入3.4 Value 进行注入 1. 实例化Bean 默认使用无参构造函数&…

qt QPicture详解

1、概述 QPicture类是Qt框架中的一个重要图形类&#xff0c;它主要用于记录和回放QPainter的绘图指令。这个类能够跨平台、无分辨率依赖地绘制图形&#xff0c;非常适合用于实现打印预览和图像操作等场景。QPicture可以将绘图操作序列化为一种独立于平台的格式&#xff0c;保存…

【计算机网络教程】课程 章节测试1 计算机网络概述

一. 单选题&#xff08;共16题&#xff09; 1 【单选题】以下关于TCP/IP参考模型缺点的描述中&#xff0c;错误的是&#xff08; &#xff09;。 A、在服务、接口与协议的区别上不很清楚 B、网络接口层本身并不是实际的一层 C、它不能区分数据链路和物理层 D、传输层对…

金融标准体系

目录 基本原则 标准体系结构图 标准明细表 金融标准体系下载地址 基本原则 需求引领、顶层设计。 坚持目标导向、问题导向、结果 导向有机统一&#xff0c;构建支撑适用、体系完善、科学合理的金融 标准体系。 全面系统、重点突出。 以金融业运用有效、保护有力、 管理高…

Linux练习作业

1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份 环境准备 主从服务器都需要进行的操作#关闭防火墙、SELinnux systemctl stop firewalld setenforce 0#软件安装 yum install bind -y实验一&#…

【STL_list 模拟】——打造属于自己的高效链表容器

一、list节点 ​ list是一个双向循环带头的链表&#xff0c;所以链表节点结构如下&#xff1a; template<class T>struct ListNode{T val;ListNode* next;ListNode* prve;ListNode(int x){val x;next prve this;}};二、list迭代器 2.1、list迭代器与vector迭代器区别…

《Qwen2-VL》论文精读【上】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当

1、论文地址Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution 2、Qwen2-VL的Github仓库地址 该论文发表于2024年4月&#xff0c;是Qwen2-VL的续作&#xff0c;截止2024年11月&#xff0c;引用数24 文章目录 1 论文摘要2 引言3 实验3.…

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、鉴权直播2、视频点播3、RTMP推流视频直播和点播流媒体服务 1、鉴权直播 云直播服务-》鉴权直播 -》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中…

Zypher Research:服务器抽象叙事,GameFi 赛道的下一个热点?

继链抽象、账户抽象的概念后&#xff0c;Zypher Network 进一步提出了服务器抽象的概念&#xff0c;并基于 zk 技术率先推出了应用于 Web3 游戏领域的服务器抽象方案。基于该方案&#xff0c;游戏开发者能够在完全去中心化的环境下创建、运行游戏&#xff0c;而不需要依赖传统的…

【SpringCloud详细教程】-01-一文了解微服务

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

在使用 AMD GPU 的 PyTorch 中实现自动混合精度

Automatic mixed precision in PyTorch using AMD GPUs — ROCm Blogs 随着模型规模的增加&#xff0c;训练它们所需的时间和内存——以及因此而产生的成本——也在增加。因此&#xff0c;采取任何措施来减少训练时间和内存使用都是非常有益的。这就是自动混合精度&#xff08;…