La cuadrícula es de 10x10
Este es el script original antes de agregar espacios:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GridGenerator : MonoBehaviour
{
public GameObject gridBlock;
public int gridWidth = 10;
public int gridHeight = 10;
public List<Vector3> positions = new List<Vector3>();
public List<GameObject> blocks = new List<GameObject>();
private GameObject[] wallsParents = new GameObject[4];
void Start()
{
wallsParents[0] = GameObject.Find("Top Wall");
wallsParents[1] = GameObject.Find("Left Wall");
wallsParents[2] = GameObject.Find("Right Wall");
wallsParents[3] = GameObject.Find("Bottom Wall");
GenerateGrid();
}
private void GenerateGrid()
{
for (int x = 0; x < gridWidth; x++)
{
for (int z = 0; z < gridHeight; z++)
{
GameObject block = Instantiate(gridBlock, Vector3.zero, gridBlock.transform.rotation) as GameObject;
block.transform.parent = transform;
block.transform.tag = "Block";
block.transform.localScale = new Vector3(1, 0.1f, 1);
block.transform.localPosition = new Vector3(x, 0, z);
block.GetComponent<Renderer>().material.color = new Color(241, 255, 0, 255);
if (block.transform.localPosition.x == 0)//TOP
{
positions.Add(block.transform.localPosition);
block.transform.parent = wallsParents[0].transform;
block.transform.name = "TopWall";
}
else if (block.transform.localPosition.z == 0)//LEFT
{
positions.Add(block.transform.localPosition);
block.transform.parent = wallsParents[1].transform;
block.transform.name = "LeftWall";
}
else if (block.transform.localPosition.z == gridWidth - 1)//RIGHT
{
positions.Add(block.transform.localPosition);
block.transform.parent = wallsParents[2].transform;
block.transform.name = "RightWall";
}
else if (block.transform.localPosition.x == gridHeight - 1)//BOTTOM
{
positions.Add(block.transform.localPosition);
block.transform.parent = wallsParents[3].transform;
block.transform.name = "BottomWall";
}
blocks.Add(block);
}
}
}
}
Y el resultado: las 4 paredes están en su lugar:
Luego cambié la línea:
block.transform.localPosition = new Vector3(x, 0, z);
A
block.transform.localPosition = new Vector3(x * 1.5f, 0, z * 1.5f);
Y ahora el resultado es que las 4 paredes están en posiciones incorrectas:
¿Tengo que multiplicar también los bloques de las paredes?
Pero si ya multiplico todos los bloques por 1.5f, ¿por qué los bloques de las paredes no cambian la posición también en 1.5f?
block.transform.localPosition = new Vector3(x * 1.5f, 0, z * 1.5f);
esta línea se establecerá, localPosition.x = 1.5f * x
lo que solo afectaría a las paredes derecha e inferior porque, para las paredes superior e izquierda, la x = 0
multiplicación no afectará.
Debe cambiar su comparación para verificar el valor del índice en lugar de localPosition
:
if (x == 0) //TOP
if (z == 0) //LEFT
if (z == gridHeight - 1) //RIGHT
if (x == gridWidth - 1) //BOTTOM
Esto agregará los bloques correctos en las paredes independientemente de la posición.
Espero que esto ayude :)
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras