Tengo un script que crea un objeto de terreno y lo pinta con texturas, pero tengo un problema. Cuando intento colocar objetos del juego (como el simple objeto de agua que proporciona la unidad), utilizo un Raycast para determinar la altura correcta para colocar el objeto del juego, pero eso solo garantiza que se coloque correctamente en ese punto en particular.
¿Cómo haría para aplanar el terreno debajo del objeto del juego para que no entre en el terreno o cuelgue en el aire en el caso de las colinas?
Respuestas:
Como dije en mi comentario, querrás encontrar todos los vértices que componen los triángulos debajo de tu objeto de juego y establecer su valor y en el mismo valor.
Expandiré mi comentario con pasos más detallados. No estoy muy familiarizado con Unity, por lo que no conozco las mejores herramientas para usar en el trabajo, pero creo que puedo ayudarlo a comenzar por el camino correcto.
Método de fuerza bruta:
Para cada rayo que golpea algo, puede obtener el triángulo en la malla del terreno con lo siguiente:
p0, p1 y p2 son todas las posiciones de los tres vértices que forman el triángulo que ha sido golpeado. Desea ajustar cada una de esas posiciones de vértices para tener el mismo
y
valor. Puedes recolectar todos los vértices, luego establecerlos a uny
valor promedio , o puedes usar ely
valor inicial que encontraste al colocar el objeto del juego.Optimizaciones:
En lugar de simplemente lanzar una cuadrícula de rayos, puede barrer un colisionador hacia abajo desde el objeto del juego y recoger los puntos de contacto de las colisiones entre el colisionador de objetos del juego y la malla de colisión del terreno. Luego, para cada uno de esos puntos de contacto, realice los pasos anteriores para obtener los vértices que desea mover.
Cree su terreno de tal manera que cada vértice
x
yz
valores estén alineados con una cuadrícula, y solo varíe en suy
valor. Ahora puede obtener fácilmente los límites de su objeto de juego y cambiar todos los valores y de los vértices dentro de esos límites.Esa última optimización es realmente un método alternativo que probablemente sería fácil de implementar y bastante efectivo.
fuente
Por lo general, quiere que el suelo debajo del objeto sea plano y que se alise el suelo inmediatamente a su alrededor.
Si el terreno está hecho de una cuadrícula y el edificio está alineado con el eje, esto es mucho más fácil.
En el caso general, subdivide los triángulos en los que se asienta el edificio, y luego establece la y de todos los vértices de los triángulos en los que se asienta el edificio en la misma y , y luego realiza un desplazamiento de punto medio para todos los vértices dentro de una cierta distancia que son no ellos mismos debajo de un edificio.
He utilizado este enfoque para colocar carreteras en un terreno 3D.
Por lo general, desea imponer una separación mínima entre edificios para tener suficiente terreno para suavizar. O bien, puede ejecutar el algoritmo provisionalmente antes de la colocación y ver si se supera algún umbral de inclinación y, por lo tanto, controlar dónde el usuario puede colocar edificios.
fuente