¿Cuáles son los beneficios de que una pared sea un avión o una caja? ¿Debo usar un avión con un colisionador de caja en lugar de un colisionador de malla?
¿Cuáles son los beneficios de que una pared sea un avión o una caja? ¿Debo usar un avión con un colisionador de caja en lugar de un colisionador de malla?
Respuestas:
Habrá un par de cosas diferentes que deberá considerar.
Nota: los beneficios de las optimizaciones que se describen a continuación solo importan realmente con una tonelada de paredes. En ese punto, sería aconsejable considerar una solución diferente, como la partición de espacio binario (BSP) para hacer sus paredes en su juego. Esto haría que sus niveles estén altamente optimizados para el renderizado (si está diseñado correctamente) y para la física (ya que tiene una muy buena definición de qué colisiona y qué no).
Una caja tardará más en renderizarse que un avión. Tiene más vértices y triángulos, lo que significa que el sombreador de vértices y el rasterizador tendrán que ejecutarse sobre más datos. Por lo tanto, solo use un cuadro cuando lo necesite en términos de visibilidad. Elimina las caras según sea necesario para lo que el jugador necesitará ver.
Siempre debe usar un BoxCollider
opuesto a un MeshCollider
cuando pueda. MeshCollider
s tiene que aplicar colisiones por cara (o como un casco convexo) de la malla y hacer que la emisión de rayos y la física sean más lentas (pero es una cantidad insignificante para una sola caja). Otra cosa BoxColliders
es que es mucho más difícil para el jugador atravesarlos cuando van muy rápido. Incluso con colisiones continuas, si todavía tiene cosas que atraviesan las paredes, siempre puede expandir elBoxColliders
Si es mucho más rápido trabajar con planos MeshColliders
(porque no necesita ajustar todo BoxColliders
para que coincida con sus dimensiones), puede estar bien usarlos si obtiene el rendimiento que desea.
Ampliando un poco los puntos de "Coburn" :
Renderizado : si renderiza el muro solo como un plano, entonces el muro solo será visible desde un lado, ya que el plano (o más exactamente sus caras) solo tiene un lado renderizado. Entonces, si el jugador puede moverse alrededor de la pared, necesitaría varios planos para cubrir todos los lados, lo que significa que terminará con una caja de todos modos.
Física : los colisionadores de geometría simple (esferas, cajas, etc.) siempre son más rápidos de calcular en comparación con los colisionadores de malla completa, ya que no todas las caras de la malla deben verificarse individualmente. En cambio, se pueden usar rayos "simples" o cálculos de distancia (por ejemplo, distancia al centro de la esfera menos el tamaño de la esfera).
Para otros motores de física que tienen un "colisionador de avión" separado (que Unity no tiene), no hay uno "mejor". Un avión puede ser un poco más rápido en cuanto al rendimiento, pero luego puede encontrarse con el problema de los objetos rápidos que lo atraviesan sin chocar realmente. Luego se queda con colisionadores más gruesos (por lo tanto, caja en lugar de plano) o pasar a Detección de colisión continua (CCD), como se explica aquí .
Una cosa más sobre el renderizado: cuando tiene su propia implementación de mapeo de sombras, los muros hechos de cajas pueden ser superiores a los muros hechos de planos debido al peter-panning que puede aparecer con planos.
Aquí hay una explicación del síntoma:
http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/#peter-panning
Siempre me dijeron que si vas a tener sombras, es mejor hacerlo sólido para ayudar con el sangrado leve porque la diferencia de profundidad es muy pequeña y sangrará.
Podría estar equivocado, pero hago todas mis paredes y cosas como esas de dos lados, una pared solo tendrá unos pocos vértices, por lo que no debería ser un gran ahorro tener un avión.
Hay algunas cosas que dejo a los lados, pero es principalmente la parte inferior o superior de las cosas que tienen muchas cosas a su alrededor para ayudar con el sangrado leve.
Hago lo mismo para la física, no todos pensé realmente en eso, pero me pareció correcto usar una pared como una pared y un avión como avión, pero eso soy solo yo