No tienes acceso a esta clase

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

Configurar el manager de dulces

11/31
Recursos

Para juntar los elementos gráficos de nuestro videojuego (el fondo, los caramelos y la grilla) con el script que llamamos Board Manager debemos crear un Game Object vacío, sin nada visual, que invoque al script y le permita controlar los elementos del proyecto.

Para esto, debemos crear un Game Object vacío con la opción Create Empty y añadir una etiqueta con colores para localizarlos más fácilmente a pesar de ser invisibles.

Aportes 8

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para quien pueda interesar, a mi me gusta mas que tenga al menos un poquito de separacion entre celdas de frutas, para ello cree dos variables a las que llame padding (no se mucho de web, pero creo que era el termino) una para X y otra para Y, se las adicione al Vector2 del offset y este fue mi resultado:

control + shift + n = crear un objeto vació en “Hierachy”

Las etiquetas nos ayudan a encontrar más fácilmente los Game Objects sin contenido visual 👍.

Si alguien cómo utiliza prefabs con animación guardados como GameObject y no lo puede agregar como lo que hace el profesor, lo que tienen que hacer es cambiar en el código de BoardManager el List de Spirte a GameObject

// Si utilizas sprites como el profesor
public List<Spite> prfabs = new List<Sprite>();

// Si utilizas prefabs creados por ti
public List<GameObject> prfabs = new List<GameObject>();

hola me sale lo siguiente
IndexOutOfRangeException: Index was outside the bounds of the array.
BoardManager.CreateInitialBoard (UnityEngine.Vector2 offset) (at Assets/Scripts/BoardManager.cs:68)
BoardManager.Start () (at Assets/Scripts/BoardManager.cs:31)
pero voy a las líneas y no veo el error.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoardManager : MonoBehaviour
{//creamos 1 singleton solo puede esta instanciado 1 vez 
    public static BoardManager sharedInstance;
    public List<Sprite> prefabs = new List<Sprite>();
    public GameObject currentCandy; //caramelo actual
    public int xSize, ySize;

    private GameObject[,] candies; //matriz de caramelo

    public bool isShifting { get; set; }//se esta intercambiando caramelos

    private Candy selectedCandy;

    // Start is called before the first frame update
    void Start()
    {//si es null inicializamos tecnica del singleton
        if (sharedInstance == null)
        {
            sharedInstance = this;
        }
        else
        {
            Destroy(gameObject);
        }

        Vector2 offset = currentCandy.GetComponent<BoxCollider2D>().size;
        CreateInitialBoard(offset);
    }

    //crear tablero inicial
    private void CreateInitialBoard(Vector2 offset)
    {
        candies = new GameObject[xSize, ySize];

        float startX = this.transform.position.x;
        float startY = this.transform.position.y;
        int idx= -1;
        
        //creamos bucle anidado
        for(int x = 0; x < xSize; x++)
        {
            for(int y = 0; x < ySize; y++)
            {//con esto inicialiso la variable x e y
                GameObject newCandy = Instantiate(currentCandy,
                    new Vector3(startX + (offset.x*x),
                    startY +(offset.y*y),
                    0),
                    currentCandy.transform.rotation);//rotacion
                //lo siguiente es poner el nombre del candy
                newCandy.name = string.Format("Candy[{0}] [{1}]", x, y);

                //creo 1 bucle si el valor actual se corresponde  con la pos de arriba y abajo
                do {//ejecuta la variable idx  como numero aliatorio
                    idx = Random.Range(0, prefabs.Count);
                } while((x>0 &&idx == candies[x-1,y].GetComponent<Candy>().id) ||
                        (y>0 &&idx == candies [x, y-1].GetComponent<Candy>().id));

                
                Sprite sprite = prefabs[idx]; //obtenemos el numero aleatorio  entre 0 y 5
                newCandy.GetComponent<SpriteRenderer>().sprite = sprite;//invoco al getcomponet y cambiamos el sprite por el new Sprite
                newCandy.GetComponent<Candy>().id = idx;

                newCandy.transform.parent = this.transform;//padre del caramelo
                candies[x, y] = newCandy;//crear nuevo caramelo

                
            }
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }

}
Yo tengo un problema no sé qué sea alguien que me pueda ayudar por favor?

Genial

no voy a chequear de nuevo una vez mas, es frustrante.