No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Añadir caramelos de forma aleatoria

12/31
Recursos

Vamos a añadir un caramelo aleatorio a cada uno de los espacios de nuestra grilla, solo debemos añadir las siguientes líneas de código en el script del BoardManager:

Sprite sprite = prefabs[Random.Range(0, prefab.Count)];
newCandy.GetComponent<SpriteRenderer>().sprite = sprite;
newCandy.GetComponent<Candy>().id = -1;

Recuerda que debemos generar el id de nuestros dulces de forma automática en las próximas clases.

Aportes 9

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Aqui hay que hacer un parentesis, si estuviste haciendo los objetos animaciones, vas a necesitar hacer un par de cambios para que esto funcione como deberia, y para que a futuro tengas todo ya preparado.

Para empezar, a las animaciones debes crearles un estado de Idle (o inerte), crear un parametro bool para que transicione a la animacion que corresponde.

Luego ya que lo que estamos pasando es una animacion, en vez de un sprite debemos crear prefabs que contengan un componente animator enlazado a la animacion que creamos, cambiamos de List<Sprite> a List<GameObject> y luego el procedimiento es bastante intuitivo, dejo aqui mi codigo para quien pueda interesarle.

Tambien pueden hacerlo todo en una linea

newCandy.GetComponent<SpriteRenderer>().sprite = prefabs[Random.Range(0, prefabs.Count)];

yo aproveche de poner todas los candis como hijos del boardManager

newCandy.transform.parent = transform;

Así es como me está quedando 👀

La vez que lo intenté por mi casi acierto lo que pasa es que staba intentando asignar todo el Sprite de nuestros prefabs al newCandy directamente:

                currentCandy = prefabs[Random.Range(0, prefabs.Count)];

Para generar un número aleatorio podemos utilizar la función Random.Range() con el mínimo y el máximo de elementos de nuestra lista de posibles resultados, por ejemplo, del 0 al 6.

Sin embargo, para acceder a todos los elementos de nuestra lista debemos empezar desde 0: lista[0] es el primer elemento, lista[1] el segundo y así hasta lista[5] que es el sexto y último elemento.

Por lo tanto, cuando tenemos una lista de 6 elementos, debemos iterar desde la posición list.Count - 1 que en nuestro ejemplo es 5 6 - 1. Así que, la función Random.Range necesita el número mínimo más la cantidad de elementos de nuestra lista, pero, en realidad, va a devolver alguno de los posibles resultados comenzado desde 0:

Random.Range(0, list.Count); // 0 - 6

Yo, estableci el ID del caramelo de la siguiente forma:

public class Candy : MonoBehavior 
{
	//en las declaraciones publicas
	#region Public Definitions
	//coloque el ID del candy como estatico inicializado en 0
	public static int id = 0; 
	#endregion 
	 //todo el codigo igual al curso
}

y cuando asigno el id en el codigo de BoardManager:

public class BoardManager : MonoBehavior
{
	//todo el codigo igual al curso
	public CreateInitialBoard(Vector2 offset) 	
	{
		//todo el codigo igual al curso, sin embargo
		Candy.id++; //incrementa el id "static"
	}
}

Con esto se genera el ID automaticamente y se almacena para cada uno.

PD: no se si esta del todo correcto, pero es un autoincrementable, quizas al ser publico traiga problemas de seguridad luego, pero, de momento me parecio una buena idea para efectos practicos.

Imprimi el ID para verificar

newCandy.name = $"Candy: [{x}],[{y}], id: {Candy.id};

y este fue el resultado:

Genial

Mi solucion

 Newcandy.GetComponent<SpriteRenderer>().sprite = prefabs[Random.Range(0, prefabs.Count)];```