毕设也总算做到对象池部分了,希望能做完,悲。
先说一下对象池是干什么的好了,就是我们集中创建一大堆需要复用物体的管理对象。在每次用的时候都从这个对象里面拿,而不是每次都去实例化和销毁新的物体
比如我们玩家就是钓鱼佬,每次钓完鱼都需要把鱼丢回去,下次掉的还是这条鱼,而不是把这条🐟直接做掉,买新的丢进去给自己掉。
而丢🐟和钓🐟这个步骤在Unity中可以通过gameobjet.SetActive(false)gameobjet.SetActive(true)来实现,即将物体隐藏和出现
好,理论完毕那怎么创建对象池呢;
下面是我对对象池的需求
1.由于我做的游戏很小那么我只需要一个对象池,所以我的对象池继承自单例;
2.由于我的怪物也很少,所以需要通过改变怪物的颜色来代表不同怪物,所以用了组件来代替gameobject
3.由于是rougelike游戏,所以一般一个房间的怪物不会超过对象池的上限,所以这里没有用数组而是用队列来完成
单例:
using UnityEngine;
public abstract class SingletonMonobehaviour<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance
{
get
{
return instance;
}
}
protected virtual void Awake()
{
if (instance == null)
{
instance = this as T;
}
else
{
Destroy(gameObject);
}
}
}
2.第一件事我们需要一个字典和一个结构体,同时我们需要我们的对象池不需要重复的脚本挂接
[DisallowMultipleComponent]
public class PoolManager : SingletonMonobehaviour<PoolManager>
{
//对象池数组
[SerializeField] private pool[] poolArray = null;
private Transform objectPoolTransform;
//对象池根节点,也就是我们同一组对象的父节点位置
private Di