关于Unity3D中对象池的创建与回收

这篇博客探讨了Unity3D中的对象池机制,旨在避免频繁创建和销毁对象以节省内存。作者创建了一个资源文件夹存放预设体和脚本,并提供了Subpool、IControl、PoolControl等关键脚本的概述,以及Sphere和Player脚本作为测试示例,展示了对象池的创建和回收过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写的第一篇博客,说实话是有点激动的,以后每个周会留下我的一些学习笔记与感想,将会一直学习下去,欢迎一起交流学习, QQ:1059213621
对象池:在激活对象时,它从池中提取。在停用对象时,它放回池中,等待下一个请求。
作用:我的认识不够全面,单纯的认为是为了避免节约电脑内存的一种方法,使用对象池后,就不需要生成对象,然后再销毁,不断的创建和销毁本身是很消耗电脑内存的。(如有更好的更深度的认识欢迎交流)

首先是新建一个工程,在Assets下创建一个文件夹命名为Resources(创建这个文件夹的作用在于存放我们的预设体和脚本,当然生成的对象也要在这个文件夹里面用来Resources.Load),然后在Hierarchy面板里面创建一个Sphere(创建一个球),然后把这个球拖成预设体,
本次一共有五个脚本,分别为:
Subpool:对象池用于存放 相同类型 的游戏对象,不需要继承与MonoBehaviour;
IControl:接口类 : 用于管理对象的卵生和回收;
PoolControll:用于管理存放各种类型的游戏对象的对象池 管理类以K-Value来管理;
Sphere 和 Player脚本用来测试,将这两个脚本挂载到Sphere的身上,连续按下空格键实现对象池的回收和创建效果(当对象生成3s后,及活性设置为false),可以亲自尝试一下,
接下来是代码实现:
创建一个脚本命名为 Subpool

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 1、从对象池中取一个游戏对象
/// 2、回收某一个游戏对象
/// 3、回收所有游戏对象
/// 4、检查某个游戏对象是否在池子里
/// </summary>
public class Subpool {

    //对象池,里面存放场景中所需要的游戏对象
    List<GameObject> pool = new List<GameObject> ();
    //要创建的游戏物体的预设体
    GameObject prefab;

    //返回预设体的名字,预设体的名字和对象池的名字一致
    //在管理对象池的类里面,可以通过预设体的名字找到相对应的对象池
    public string name{

        get{

            return prefab.name;
        }
    }
    //自定义构造方法
    public Subpool(GameObject obj){

        prefab = obj;
    }

    //1、从对象池中获取一个对象
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值