Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

navmesh esquivar jugadores

Iniciado por ecko, Agosto 25, 2018, 04:36:04 PM

Tema anterior - Siguiente tema
Cita de: francoe1 date=1535385889y como todo lo que te da UNITY es de MALO para ABAJO
   


 
 
Cita de: Eskema date=1535385439Luego cuando lo dominas pasas del navmesh de unity y te pillas un plugin y vives mas feliz XD
   


 
 
... Haters gonna hate

Respecto a la duda inicial del post, tienes que cambiar el Quality en el Obstacle Avoidance del NavMeshAgent, respecto a poner un objeto vacio con un NavMeshObstacle, no creo que funcione ya que cuando un NavMeshAgent esta demasiado cerca a un NavMeshObstacle (en este caso totalmente en el centro), el desireVelocity del NavMeshAgent te empieza a dar valores extraños lo cual te daña la navegación, lo que yo hago personalmente es cambiar el Quality a un valor diferente a None, y añado un NavMesAgent y un NavMeshObstacle en el mismo GameObject, pero ambos no pueden estar activos al mismo tiempo es decir, si tu AI se detiene por pequeños momentos, que seria lo mas normal, desactivas el NavMeshAgent y activas el NavMeshObstacle, luego cuando vayas a navegar, justo antes de navegar, activas el NavMeshAgent y desactivas el NavMeshObstacle, todo esto debería bastar para que se vea decente.

Cita de: lightbug date=1535388285 
   
   
       
   
   
      ... Haters gonna hate
   


Te queremos igual y lo sabes!!! Hahaha

Cita de: James Roman date=1535388796Respecto a la duda inicial del post, tienes que cambiar el Quality en el Obstacle Avoidance del NavMeshAgent, respecto a poner un objeto vacio con un NavMeshObstacle, no creo que funcione ya que cuando un NavMeshAgent esta demasiado cerca a un NavMeshObstacle (en este caso totalmente en el centro), el desireVelocity del NavMeshAgent te empieza a dar valores extraños lo cual te daña la navegación, lo que yo hago personalmente es cambiar el Quality a un valor diferente a None, y añado un NavMesAgent y un NavMeshObstacle en el mismo GameObject, pero ambos no pueden estar activos al mismo tiempo es decir, si tu AI se detiene por pequeños momentos, que seria lo mas normal, desactivas el NavMeshAgent y activas el NavMeshObstacle, luego cuando vayas a navegar, justo antes de navegar, activas el NavMeshAgent y desactivas el NavMeshObstacle, todo esto debería bastar para que se vea decente.
   


Hice esto que comentas y funciona todo bien salvo un pequeño detalle, a la hora de desactivar el obstacle y activar el agente pega como un pequeño saltito y he comprobado que se debe a que a la hora de desactivar el obstacle no le da tiempo a quitar el agujero tallado y calcula la nueva ruta con este tallado.
 
La prueba que hice para averiguarlo fué desactivar obstacle y luego activar agent en diferentes pasos y de este modo funciona perfecto pero si lo hago todo en una misma iteración me da el problema del salto.

Cita de: ecko date=1535626996Hice esto que comentas y funciona todo bien salvo un pequeño detalle, a la hora de desactivar el obstacle y activar el agente pega como un pequeño saltito y he comprobado que se debe a que a la hora de desactivar el obstacle no le da tiempo a quitar el agujero tallado y calcula la nueva ruta con este tallado.
   
   
      La prueba que hice para averiguarlo fué desactivar obstacle y luego activar agent en diferentes pasos y de este modo funciona perfecto pero si lo hago todo en una misma iteración me da el problema del salto.
   


yo lo hago dentro de una coroutina, te comparte el código que uso para estos casos , ademas hago un montón de comprobaciones en caso de que el camino se genere erróneamente, espero te sirva 
//www.unityspain.com/applications/core/interface/file/attachment.php?id=12162">PathGenerator.cs

Agosto 30, 2018, 02:15:20 PM #20 Ultima modificación: Agosto 30, 2018, 02:16:05 PM por ecko
Hola James, gracias por la aportación :), se me ocurrió lo mismo que acabas de decir de hacer una corrutina y parece que funciona perfectamente de este modo, el script que mandastes está vacío jjejee y bueno la corrutina que hice fué simplemente esto:
 
            GetComponent<NavMeshObstacle>().enabled = false;

            yield return new WaitForSeconds(.1f);

            GetComponent<NavMeshAgent>().enabled = true;  
 
no sé si hay alguna otra forma mas eficiente como hacer una especie de yield hasta que detecte que se ha desactivado por completo :S

Pues tienes razón ha quedado vació el script, te lo dejo por aca https://pastebin.com/pBQz9din , respecto a yield con que esperes un frame es suficiente, es decir Time.deltaTime en lugar d .1f, saludos!

Cita de: James Roman date=1535631821Pues tienes razón ha quedado vació el script, te lo dejo por aca https://pastebin.com/pBQz9din , respecto a yield con que esperes un frame es suficiente, es decir Time.deltaTime en lugar d .1f, saludos!
   


Solo para mencionarlo, si retornas "null" (del yield) tiene el efecto de esperar al siguiente frame, como el final de un Update :)

Septiembre 01, 2018, 02:35:27 AM #23 Ultima modificación: Septiembre 01, 2018, 02:38:04 AM por CastGames
Se me ocurre un script loco en el que cuando dos agentes chocan se decida (Al azar, o dando prioridad a un tipo o aun Id, o al que esté mas en una coordenada, que se yo) cual de ellos para, avanza en la direccion contraria a la que estaba x cantidad, espera, digamos un segundo (para que el otro siga moviéndose como debe) y luego arranca de nuevo.


Ahora ya escribir el código, aún se me escapa.

 
 
Saludos!
 
https://www.alucinoconfeisbuk.com/2017/10/pase-usted-primero_25.html

Etiquetas: