我在Unity中创建了一个ObjectPool来生成小怪,但遇到了一个问题:整个脚本正常工作,除了一行,即将预加载的对象添加到池中。
预加载池时,脚本无法处理向池中添加对象并引发错误(它在舞台上创建了一个对象,但无法将其添加到池中并隐藏它),因此舞台上出现一个实例并出现错误出现在控制台中:
NRE(我知道这是什么,但是实例的链接在括号里?)第43行,如果有人复制代码:
_pool.Enqueue(item);
using System;
using System.Collections.Generic;
using UnityEngine;
namespace ObjectsPool
{
public class PoolBase<T>
{
private readonly Func<T> _preloadFunc;
private readonly Action<T> _getAction;
private readonly Action<T> _returnAction;
private Queue<T> _pool;
private List<T> _active = new();
public PoolBase(Func<T> preloadFunc, Action<T> returnAction, Action<T> getAction, int preloadCount)
{
_preloadFunc = preloadFunc;
_getAction = getAction;
_returnAction = returnAction;
if (preloadFunc == null)
{
Debug.LogError(message: "Preload function is null");
return;
}
for (int i = 0; i < preloadCount; i++)
Return(item: preloadFunc());
}
public T Get()
{
T item = _pool.Count > 0 ? _pool.Dequeue() : _preloadFunc();
_getAction(item);
_active.Add(item);
return item;
}
public void Return(T item)
{
_pool.Enqueue(item);
_returnAction(item);
_active.Remove(item);
}
public void ReturnAll()
{
foreach (T item in _active.ToArray())
{ Return(item); }
}
}
}