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)

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