Unity 6.3
0 онлайн 66 гостей 3 в системе
Вход

LinkedPool<T0>

класс в UnityEngine.Pool

Выполнено в:UnityEngine.CoreModule


Интерфейсы приспособлений:IObjectPool<T0>

Описание

Версия связанного списка IObjectPool<T0>.

Объектный пул является способом оптимизации ваших проектов и снижения нагрузки на CPU при быстром создании и уничтожении новых объектов. Это хорошая практика и шаблон дизайна, который следует иметь в виду, чтобы освободить вычислительную мощность CPU для выполнения более важных задач и не быть затопленным повторяющимися вызовами create и destroy. LinkedPool использует связанный список для хранения коллекции экземпляров объектов для повторного использования. Обратите внимание, что это не безопасно для потоков.

using System.Text;
using UnityEngine;
using UnityEngine.Pool;

// This component returns the particle system to the pool when the OnParticleSystemStopped event is received. [RequireComponent(typeof(ParticleSystem))] public class ReturnToPool : MonoBehaviour { public ParticleSystem system; public IObjectPool<ParticleSystem> pool;

void Start() { system = GetComponent<ParticleSystem>(); ParticleSystem.MainModule main = system.main; main.stopAction = ParticleSystemStopAction.Callback; }

void OnParticleSystemStopped() { // Return to the pool pool.Release(system); } }

// This example spans a random number of ParticleSystems using a pool so that old systems can be reused. public class PoolExample : MonoBehaviour { public enum PoolType { Stack, LinkedList }

public PoolType poolType;

// Collection checks will throw errors if we try to release an item that is already in the pool. public bool collectionChecks = true; public int maxPoolSize = 10;

IObjectPool<ParticleSystem> m_Pool;

public IObjectPool<ParticleSystem> Pool { get { if (m_Pool == null) { if (poolType == PoolType.Stack) m_Pool = new ObjectPool<ParticleSystem>(CreatePooledItem, OnTakeFromPool, OnReturnedToPool, OnDestroyPoolObject, collectionChecks, 10, maxPoolSize); else m_Pool = new LinkedPool<ParticleSystem>(CreatePooledItem, OnTakeFromPool, OnReturnedToPool, OnDestroyPoolObject, collectionChecks, maxPoolSize); } return m_Pool; } }

ParticleSystem CreatePooledItem() { GameObject gameObject = new GameObject("Pooled Particle System"); ParticleSystem particleSystem = gameObject.AddComponent<ParticleSystem>(); particleSystem.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);

ParticleSystem.MainModule main = particleSystem.main; main.duration = 1; main.startLifetime = 1; main.loop = false;

// This is used to return ParticleSystems to the pool when they have stopped. ReturnToPool returnToPool = gameObject.AddComponent<ReturnToPool>(); returnToPool.pool = Pool;

return particleSystem; }

// Called when an item is returned to the pool using Release void OnReturnedToPool(ParticleSystem system) { system.gameObject.SetActive(false); }

// Called when an item is taken from the pool using Get void OnTakeFromPool(ParticleSystem system) { system.gameObject.SetActive(true); }

// If the pool capacity is reached then any items returned will be destroyed. // We can control what the destroy behavior does, here we destroy the GameObject. void OnDestroyPoolObject(ParticleSystem system) { Destroy(system.gameObject); }

void OnGUI() { GUILayout.Label("Pool size: " + Pool.CountInactive); if (GUILayout.Button("Create Particles")) { int amount = Random.Range(1, 10); for (int i = 0; i < amount; ++i) { ParticleSystem particleSystem = Pool.Get(); particleSystem.transform.position = Random.insideUnitSphere * 10; particleSystem.Play(); } } } }

Свойства

Свойство Описание
CountInactiveЧисло объектов, которые в настоящее время доступны в пуле.

Конструкторы

Конструктор Описание
LinkedPool_1Создает новый экземпляр LinkedPool.

Открытые методы

Метод Описание
ClearУдаляет все элементы пулов. Если пул содержит обратный вызов destroy, то он будет вызван для каждого элемента, который находится в пуле.
DisposeУдаляет все элементы пулов. Если пул содержит обратный вызов destroy, то он будет вызван для каждого элемента, который находится в пуле.
GetПолучить экземпляр из пула. Если пул пуст, то будет создан новый экземпляр.
ReleaseВозвращает экземпляр в пул.