当前位置: 首页 > article >正文

unity泛型对象池

泛型对象池

      • 代码

代码

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;


public abstract class Objectpool<T> : MonoBehaviour where T : Component
{
    private Queue<T> pool = new Queue<T>();
    [SerializeField] private T prefab;
    [SerializeField] private int maxPoolCapacity = 100;
    public static Objectpool<T> Instance;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            if (Instance != this) Destroy(gameObject);
        }
    }//单例模式

    public T Get()
    {
        if (pool.Count == 0)
        {
            Add(1);
        }//如果池内没有元素那么新建一个
        T obj = pool.Dequeue();
        obj.gameObject.SetActive(true);
        ResetObject(obj); // 重置对象状态在引用该方法的类中实现
        return obj;
    }

    protected abstract void ResetObject(T obj);

    public void ReturnToPool(T obj)
    {
        obj.gameObject.SetActive(false);//把使用完的对象重新返回池中待使用
        pool.Enqueue(obj);
    }
    public void Add(int num)
    {
        if (prefab == null)//空状态检查
        {
            Debug.LogError("Prefab is null. Cannot instantiate objects.");
            return;
        }
        if(pool.Count() + num >= maxPoolCapacity)
        {
            Debug.LogError("pool will be full!");
            return;
        }
        for (int i = 0; i < num; i++)//创建num个实例加入池中
        {
            var temp = Instantiate(prefab);
            temp.gameObject.SetActive(false);
            pool.Enqueue(temp);
        }
    }
}



http://www.kler.cn/a/611562.html

相关文章:

  • Elasticsearch:使用 AI SDK 和 Elastic 构建 AI 代理
  • JVM
  • Occlum 是一个内存安全的、支持多进程的 library OS,特别适用于 Intel SGX。
  • 基于VMware虚拟机的Ubuntu22.04系统安装和配置(新手保姆级教程)
  • b站视频字幕提取拓展推荐
  • 腾讯四面面经
  • 架构思路法
  • 批量给 PDF 页面添加超链接
  • Android 自定义变形 SHA1 算法
  • 【含文档+PPT+源码】基于SpringBoot+Vue的贫困地区留守儿童关怀系统
  • React多层级对象改变值--immer
  • [leetcode]map和unodered_map的使用场景
  • 精品推荐-2025全固态电池会议演讲嘉宾(脱敏)PPT合集(30份).zip
  • Golang 容易被忽视的知识点(个人向)
  • 如何在1分钟内编写Cursorrules
  • 智慧路灯机器人是否支持远程监控和管理?
  • 工单分类总结
  • Photoshop 2025 Mac中文 Ps图像编辑
  • Playwright + MCP:用AI对话重新定义浏览器自动化,效率提升300%!
  • WebWorkers在项目中的使用案例