Para quien haya seguido mis pasos en los ultimos videos, les advierto aqui que ahora tuve que hacer mas cambios por preferencias personales, y que si siguieron lo que les dije antes, muchas cosas van a estar fuera de lugar, si aun asi quieren seguir con mis consejos:
Le quite el BoxCollider2D al background y se lo a;adi al objeto que sera el caramelo per se, cuando hice esto ya no se podia calcular el offset, asi que en vez de acceder al componente BoxCollider, accedo al GetComponent<SpriteRenderer>() que tienen una propiedad que es bounds y esa tiene sus propiedades vectoriales.
Como mis caramelos son prefabs que contienen la animacion y el box collider, y lo que existe en el juego son instancias de los caramelos, no puedo volverlos hijos de un objeto porque corromperia el estado del prefab, asi que decidi que no me molesta tanto que esten los candies en la jerarquia lateral, sin embargo los fondos si los hice hijos del board manager.
Mi codigo:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BoardManager : MonoBehaviour
{
public static BoardManager sharedInstance;
public List<GameObject> prefabs = new List<GameObject>();
public GameObject backgroundGO;
public int xSize, ySize;
private GameObject[,] candies;
int idx = -1;
[SerializeField]
private float paddingX = 0.4f, paddingY = 0.4f;
public bool isShifting { get; set; }
private void Start()
{
if(sharedInstance == null)
{
sharedInstance = this;
}
else
{
Destroy(this.gameObject);
}
Vector2 offset = new Vector2(backgroundGO.GetComponent<SpriteRenderer>().bounds.size.x + paddingX, backgroundGO.GetComponent<SpriteRenderer>().bounds.size.y + paddingY);
CreateInitialBoard(offset);
}
private void CreateInitialBoard(Vector2 offSet)
{
candies = new GameObject[xSize, ySize];
float startX = this.transform.position.x;
float startY = this.transform.position.y;
for(int x = 0; x < xSize; x++)
{
for(int y = 0; y < ySize; y++)
{
GameObject candyBackground = Instantiate(backgroundGO, new Vector3(startX + (offSet.x * x), startY + (offSet.y * y), 0), backgroundGO.transform.rotation);
candyBackground.name = string.Format($"Candy[{x}][{y}]");
candyBackground.transform.parent = this.transform;
do
{
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));
GameObject candy = prefabs[idx];
candy.GetComponent<Candy>().Id = idx;
Instantiate(candy, candyBackground.transform.position, candyBackground.transform.rotation);
candies[x, y] = candy;
}
}
}
private void Update()
{
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?