algo raro pasa aca, la clase ObjectPooler esta muy distinta a como la dejamos en al clase anterior…
creo que el editor del video corto muchas partes
Introducción
Todo lo que aprenderás para programar videojuegos 2D con Unity
Consejos de design: preparación de Assets y versionamiento de Unity
Timeline
Mejorando el flujo de Visual Studio
Tips en Visual Studio Debug.Log vs. breakpoint
Atributos en Unity
Atributos en Unity (herramientas)
Ternary Operations
Programación
Arrays, listas
Diccionarios
New Input System
Matemáticas para juegos: vectores
Matemáticas para juegos: personaje
Pathfinding - IA
Animation Events
Tween
Tweening
Movimientos básicos y cambio de variables en el tiempo
Transiciones
Callbacks
Web requests y eventos
Conexiones con API
JSON
JSON: cambio de clima
Delegates
Eventos
Introducción a los patrones de diseño
¿Qué son los patrones de diseño y para qué sirven?
Singleton
Object Pool I
Object Pool II
Observer
Físicas 2D
Effectors
Buoyancy
¡Conoce los proyectos de este curso y dales feedback!
Extra
No parar de aprender: Jams
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
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;
}
Aportes 6
Preguntas 2
algo raro pasa aca, la clase ObjectPooler esta muy distinta a como la dejamos en al clase anterior…
creo que el editor del video corto muchas partes
Acá dejo mis apuntes en código para los que se hayan perdido al ver que el código no es el mismo:
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);
}
}
}
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;
}
Reporten el problema, asi ven de solucionarlo. Una pena porque el curso me estaba gustando pero el hecho de que falten partes de las clases ( ya es la 2da vez) saca las ganas. Habrá que buscar el object Pooling por afuera😑
¿Por qué motivo el codigo del ObjectPooler.cs es tán distinto al visto en la clase pasada? Ya son varias veces en el mismo curso que pasa lo mismo con codigos modificados sin explicar el como o el por qué.
Es una gran lástima, porque siento que estoy aprendiendo más bien poco y solo se me presentan topicos a buscar por mi propia cuenta. Como si estuviese viendo un temario más que un curso el cuál estoy pagando. En fín, voy a terminar el curso pero sé que varios más están con el mismo problema y sienta mal que algunos lo dejen a medias
Entiendo que la idea es fomentar el aprendizaje continuo, el esfuerzo y ser autodidacta, pero es que ni siquiera hay un video explicando qué se hizo … probablemente sea un error en los videos que se subieron, pero esto dificulta el aprendizaje de estos conceptos tan abstractos como lo son los patrones de diseño.
a mi me sale el error del private void OnFire
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.