Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

552
Views
Unity: Mesh Renderer parece no encajar perfectamente en Edge

Actualmente estamos tratando de colocar colisionadores de malla en nuestros bordes como se muestra en las imágenes. El problema es que las mallas a veces parecen ser 2D en lugar de 3D (como se muestra en la Imagen 2 y la Imagen 3 ), lo que hace que no se puedan seleccionar desde ciertos ángulos de cámara. A veces, las mallas incluso parecen desaparecer a través de algunas partes del borde ( Imagen 1 ). Activar convexo para los colisionadores los hace mucho más fáciles de seleccionar, pero realmente no queremos hacerlo porque eso hace que no quede claro qué borde está seleccionando en este momento. Estamos creando nuestras mallas a través de bakeMesh a partir de nuestros bordes creados anteriormente, como se muestra a continuación:

 LineRenderer lineRenderer = gameEdge.GetComponent<LineRenderer>(); MeshCollider meshCollider = gameEdge.AddComponent<MeshCollider>(); Mesh mesh = new Mesh(); lineRenderer.BakeMesh(mesh, Camera.main, false); meshCollider.sharedMesh = mesh; meshCollider.convex = false;

Editar: usamos este https://github.com/mattatz/unity-tubular para generar mallas de tubos alrededor de nuestros bordes, ¡funciona bastante bien ahora!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La malla generada por el renderizador de línea es en realidad 2D. Creo que su mejor oportunidad es actualizar la orientación de la malla para que mire hacia la cámara, de modo que la malla siempre esté mirando hacia la cámara desde donde mire. De esa manera, siempre podrás hacer clic en él.

Tienes 2 opciones:

1.- Pasando la cámara nueva (con su nueva posición) todo el tiempo. Esto estaría en la Update . Tenga cuidado de usar solo el código que hornea la malla y no Mesh mesh = new Mesh() en la actualización. Porque si crea una nueva malla en la Update pasada, tendrá un error de desbordamiento de pila. Recomiendo si haces esto, para hacer la Mesh mesh; una variable de clase e iniciarla solo en la inicialización de la clase ( mesh = new Mesh(); ) para que use solo la instancia creada para actualizar la malla todo el tiempo, sin crear una new para cada actualización.

2.- Si te preocupa la eficiencia, puedes manejar cuando tu cámara se está moviendo, para que cuando deje de moverse, pases la nueva cámara junto con su posición. Para esto, necesitaría manejar el evento OnStopMoving de la cámara usted mismo para pasar la nueva cámara, de modo que cada vez que la cámara principal deje de moverse, la malla siempre estará frente a ella. Esto tiene sentido porque es más fácil para el usuario hacer clic en las cosas mientras está detenido, por lo que se puede suponer que el usuario intentará hacer clic en las líneas mientras no se mueve.

Hay una tercera opción que no mencioné debido a la factibilidad, que es envolver su renderizador de línea con colisionadores primitivos con los puntos de su línea como punto de partida para la lógica de envoltorio del colisionador de procedimiento. Sin embargo, necesitaría codificar todo eso, lo que podría llevar un tiempo.

Por otro lado, convertirlo en un colisionador convexo hasta donde lo verifiqué no es factible, ya que el comportamiento y la forma del colisionador cambian en la cocción de la malla por parte del componente MeshRenderer. Compruebe si esto podría ser de ayuda.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!