Unity 对象池

文章介绍了Unity游戏开发中如何实现对象池,用于优化资源复用。对象池通过单例模式管理,使用队列存储可复用的组件,避免频繁的实例化和销毁操作。在游戏开始时创建对象池,需要时调用并重置物体位置。示例代码展示了创建、管理和复用对象池的详细过程。
摘要由CSDN通过智能技术生成

毕设也总算做到对象池部分了,希望能做完,悲。

先说一下对象池是干什么的好了,就是我们集中创建一大堆需要复用物体的管理对象。在每次用的时候都从这个对象里面拿,而不是每次都去实例化和销毁新的物体

比如我们玩家就是钓鱼佬,每次钓完鱼都需要把鱼丢回去,下次掉的还是这条鱼,而不是把这条🐟直接做掉,买新的丢进去给自己掉。

而丢🐟和钓🐟这个步骤在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值