Object Pool II
Clase 27 de 32 • Curso de Programación 2D con Unity: Intermedio
Resumen
Aquí encontrarás el código realizado durante la anterior clase:
void Start()
{
instancedObjects = new List<GameObject>();
// Recorre los objetos que se quiere agregar
foreach(var item in itemsToPool)
{
// Recorre la cantidad estimada
for (int i = 0; i < item.amountToPool; i++)
{
// Instancia el objeto en la escena
var go = Instantiate(item.objectToPool);
// Lo deja desactivado para no ser visible
go.SetActive(false);
// Lo agrega a la lista de objetos instanciados
instancedObjects.Add(go);
}
}
}
Y es aquí donde comienza el código de esta clase, con un for ya creado:
public GameObject GetPoolObject(string tag)
{
// En caso de que existan objetos en la lista disponible, los retornará desde aquí
for (int i = 0; i < instancedObjects.Count; i++)
{
// Si el item en la posición [i] no está activo en la escena y el tag corresponde, el valor será true
if (!instancedObjects[i].activeInHierarchy && instancedObjects[i].CompareTag(tag))
{
// Retorna el objeto libre
return instancedObjects[i];
}
}
// En caso de que no existan objetos en la lista disponible
foreach (var item in itemsToPool)
{
// Revisará si en la lista de objetos a instanciar existe uno con el mismo tag
if (item.objectToPool.CompareTag(tag))
{
// Instancia el objeto en la escena
var go = Instantiate(item.objectToPool);
// Lo deja desactivado para no ser visible
go.SetActive(false);
// Lo agrega a la lista de objetos instanciados
instancedObjects.Add(go);
// Retorna el objeto libre
return go;
}
}
// Retorna null en caso de no encontrar por el tag
return null;
}