写的第一篇博客,说实话是有点激动的,以后每个周会留下我的一些学习笔记与感想,将会一直学习下去,欢迎一起交流学习, 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、从对象池中获取一个对象