Cargar Múltiples NavMeshes utilizando el Additive Loading
NavMesh Agent

Utilizando el NavMesh Agent con otros componentes

Usted puede utilizar el NavMesh Agent, NavMesh Obstacle, y los componentes Off Mesh Link con otros componentes de Unity también. Aquí hay una lista de los deberes y lo que no debe hacer cuando mezcle diferentes componentes juntos.

NavMesh Agent y Física

  • Usted no necesita agregar physics colliders a los NavMesh Agents para que estos se eviten
  • Esto es, el sistema de navegación simula los agentes y su reacción a obstáculos y el mundo estático. Aquí el mundo estático es el baked NavMesh.
  • Si usted quiere que un NavMesh Agent empuje objetos físicos o utilizar triggers físicos:
  • Agregue un componente Collider (si no está presente)
  • Agregue un componente Rigidbody
  • Prenda Kinematic (Is Kinematic) - esto es importante!
  • Kinematic significa que el rigidbody es controlado por algo además de la simulación de física
  • Si ambos el NavMesh Agent y el Rigidbody (no-kinematic) están activos al mismo tiempo, usted tiene una condición de carrera (race condition).
  • Ambos los componentes puden intentar mover el agente a lo mismo que lleva a un comportamiento indefinido
  • Usted puede utilizar un NavMesh Agent para mover e.g. un personaje jugador, sin física
  • Configure la avoidance priority (prioridad de evasión) del agente a un número pequeño (alta prioridad), para permitirle al jugador atravesar multitudes.
  • Mueva el agente jugador utilizando NavMeshAgent.velocity, para que los otros agentes puedan predecir el movimiento del jugador para evitar el jugador.

NavMesh Agent y Animator

  • NavMesh Agent y Animator con Root Motion puede causar una condición de carrera (race condition)
  • Ambos componentes intentan mover el transform cada frame
  • Dos soluciones posibles
  • La información debería siempre fluir en una dirección
  • Cualquiera de los agentes mueve el personaje y la animación sigue
  • O la animación mueve el personaje basándose en el resultado simulado
  • De lo contrario usted va a terminar teniendo un loop (bucle-ciclo) de retroalimentación difícil de depurar.
  • Animation follows agent (Animación sigue el agente)
  • Utilice NavMeshAgent.velocity como input al Animator para que difícilmente coincida con el movimiento del agente a las animaciones
  • Robusto y fácil de implementar, va a resultar en un pie deslizándose dónde las animaciones no pueden coincidir con la velocidad.
  • Agent follows animation (Agente sigue la animación)
  • Desactive NavMeshAgent.updatePosition y NavMeshAgent.updateRotation para separa la simulación de la ubicación del game object
  • Utilice la diferencia entre la posición simulada del agente (NavMeshAgent.nextPosition) y la animation root (Animator.rootPosition) para calcular el control sobre las animaciones
  • Ver Coupling Animation and Navigation para más detalles

NavMesh Agent (Agente NavMesh) y NavMesh Obstacle (Obstáculo NavMesh)

  • No se mezclan bien!
  • Activar ambas va hacer que el agente se intente evitar a él mismo
  • Si Carving es habilitada, adicionalmente el agente va a intentar constantemente re-mapear al borde del hueco tallado, incluso más comportamiento erroneo se produce
  • Asegúrese de que solo uno de ellos esté activo en cualquier momento
  • Estado fallido, usted puede apagar el agente y prenderlo en cualquier obstáculo para obligar a otros agentes evitarlo
  • Alternativamente usted puede utilizar prioridades para hacer que ciertos agentes sean evitados más

NavMesh Obstacle y Física

  • Si usted quiere que objetos controlados por física afecten el comportamiento de su NavMesh Agent
  • Agregue un componente NavMesh Obstacle al objeto el cual el agente tiene que tener estar pendiente, esto le permite al sistema de avoidance (evasión) para razonar acerca del obstáculo.
  • Si un game object tiene un Rigidbody y un NavMesh Obstacle adjunto, la velocidad del obstáculo es obtenido del Rigidbody de manera automática
  • Esto le permite a los NavMesh Agents en predecir y evitar el obstáculo en movimiento
Cargar Múltiples NavMeshes utilizando el Additive Loading
NavMesh Agent