Unity 3D: ¿Cómo apilar objetos uno encima de otro y verificar el espacio adquirido?
– UnityAssets3Free
bienvenido , por aqui kein y hoy os traigo
nueva pregunta
Soy malo para explicar, así que voy a preguntar a través de esta imagen, lo que quiero hacer es, cuando el jugador golpea el gameobject (cubo), quiero que se convierta en un lugar diferente y comience a apilarse uno encima de el otro. ahora obtengo la parte de transformación, puedo hacerlo onCollisionEnter y luego mover el objeto a la ubicación. pero eso es todo, solo puedo hacer esto para un objeto ya que los otros seguirán moviéndose dentro del otro, ahora quiero que verifiquen si la ubicación ha sido adquirida y luego apilar encima de lo que ya está allí, y si hay 3 los cubos ya están apilados uno encima del otro, así que muévase a la siguiente ubicación junto a ellos. Además, todo esto está en 3D.
1 respuesta 1
Crearía una matriz 2d o una matriz irregular.
Vamos para matriz irregular o matrices 2D aprender más
Básicamente, si sabe qué es una matriz, es un conjunto de información. Una matriz irregular es un conjunto de matrices que pueden tener matrices de longitud variable. Un 2d (puede hacer 3d, 4d, 5d, etc.) es una matriz de matrices de la misma longitud.
Entonces, básicamente, si desea que cada pila tenga la misma longitud, use una matriz 2d, si pueden variar en altura, use una matriz irregular.
En este ejemplo, voy a usar una matriz 2d.
Vector3 start = new Vector3 (0, 0, 0); //the stack starts here
Vector3 stackOffset = new Vector3 (2, 0, 0); //each stack is 2 units right
Vector3 heightOffset = new Vector3(0, 1, 0); //each object is 1 unit higher.
bool[3][5] stacks = new GameObject[3][5]; //3 stacks of 5 height
void OnCollisionEnter(Collision obj)
{
if (obj.tag == "thing")
for (int i = 0; i < stacks.Length; i++)//loop 3 times (3 stacks)
for (int ii = 0; ii < stacks[].Length; ii++) //loop 5 times (5 in each stack)
if (stacks[i][ii] == false)
stacks[i][ii] = true;
obj.transform.position = start + (i * stackOffset) + (ii * heightOffset);
return;
print("all stacks filled");
}
Espero que esto funcione, si tienes algún error, puedes hacérmelo saber en los comentarios o editar la publicación original con una imagen.
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,espero que te funcione