//没有对象池的话新建一个对象池 var poolContainer=new GameObject(reference.gameObject.name+"pool"); //添加对象池管理组件 pool = poolContainer.AddComponent<ObjectPool>(); //将预制体绑定到对象池中 pool.prefab = reference; //将预制体与对象池添加到字典
Queue<GameObject> objectPool = new Queue<GameObject>(); //为每个对象池创建队列 for (int i = 0; i < pool.size; i++) { GameObject obj = Instantiate(pool.prefab); obj.SetActive(false); //隐藏对象池中的对象 objectPool.Enqueue(obj);//将对象入队 } poolDictionary.Add(pool.tag, objectPoo...
对象池是一种常见的优化手段,我们可以自己定义自己的对象池,当然也可以直接使用Unity现在自带的对象池。 自定义对象池 ObjectPool脚本 using UnityEngine; using System.Collections.Generic; using UnityEngine.InputSystem; public class ObjectPool : MonoBehaviour { [SerializeField] private uint initPoolSize; [Serial...
Unity中使用自带对象池的基本步骤或示例代码 以下是一个使用Unity自带对象池的简单示例代码: csharp using UnityEngine; using UnityEngine.Pool; // 引用对象池的命名空间 public class PoolExample : MonoBehaviour { public GameObject objPrefab; // 要池化的预制体 public ObjectPool<GameObject> pool; /...
Unity自定义对象池和自带对象池的主要区别如下:实现方式:自定义对象池:通过创建专门的脚本实现,该脚本负责管理对象的生命周期,包括对象的创建、复用和销毁。Unity自带对象池:Unity已经内置了ObjectPool脚本和PooledObject脚本,这些脚本提供了对象池的管理机制,省去了自定义的步骤。灵活性与定制性:自...
另一个选择是使用Unity内置的对象池,这为我们省去了自定义的步骤。Unity的ObjectPool脚本和PooledObject脚本已经内置了管理机制,可以简化对象的管理流程。内置对象池通常基于内存效率和性能进行了优化,但可能不完全符合所有项目的需求,因此可能需要根据具体情况进行调整。为了验证效果,你可以创建一个简单的...
ObjectPool - 对象池类 Stack<PooledObject>变量: 存储回收对象 SetupPool方法: 初始化对象池, 设置池中对象的初始数量 GetPooledObject方法: 如果Stack为空, 则实例化对象; 若Stack不为空, 则取出一个PooledObject, 并激活(SetActive) ReturnToPool方法: 回收对象, 并设置为失活 PooledObject - 池物体类 Obj...
ObjectPool:对象池管理,提升对象的复用效率 StateMachine:状态机系统,用于管理复杂的行为逻辑 Tag:基于 ScriptableObject 的自定义标签系统,比 Unity 官方标签系统更高效 TaskScheduler:简单的任务调度系统 Time:类似于 Unreal Engine 的Timer ComponentSave Animator ...
if (!pooledObjects.activeInHierarchy) { return pooledObjects; } } //3 return null; } 首先要注意的是这个方法现在的返回值类型是GameObject而非void。这是指别的脚本可以向GetPooledObject请求一个池中的对象,而他会返回一个GameObject作为回应。其他会发生的事情如下: ...
public GameObject objectToPool; public int amountToPool; 这些变量的命名是很自明的(self-explanatory)。 通过Unity的Inspector,你将能够指定GameObject入池,并且设置预实例化的数量。一会儿会做这个。 然后,把这些代码加入Start(): pooledObjects = new List<GameObject>(); ...