Unity ofrece un sistema de navegación integrado que permite organizar las escenas según un esquema de división de malla de navegación, y tener agentes que sepan moverse por dicha malla con soltura.
La malla de navegación se divide en áreas de navegación, cada una de las cuales puede tener un cierto factor de coste (para ser multiplicado por la distancia recorrida) y un tipo (Walkable, Not Walkable, Jump o uno personalizado), para por ejemplo impedir -usando una máscara- que ciertos agentes naveguen usando las áreas de ciertos tipos.
Para mover un agente, se hace por scripting y basta con asignar una posición a la propiedad destination. Por ejemplo con agent.destination = goal.position;
Es posible definir obstáculos, que podrán ser estáticos, pudiendo pedirle a Unity que haga un agujero (Carve) en la malla de navegación, o móviles, en cuyo caso los agentes harán lo posible para sortearlos o encontrar una ruta alternativa si queda bloqueada completamente la inicial.
¡Ojo! No debes poner un componente Agent y un componente Obstacle en el mismo objeto de juego simultáneamente; el personaje se evitará a sí mismo. Intercámbialos si el personaje muere y debe convertirse por lo tanto en un obstáculo estático.
Cada agente además, mientras está activo, puede sobreescribir el coste de algunas áreas de navegación mediante programación (método SetAreaCost)… lo cual es útil para establecer diferencias entre la manera más «conveniente» de navegar de cada agente.
Combinación con otros sistemas
Para combinar la navegación con la física, no se necesitan colisionadores para que los agentes se eviten entre sí. Si usas un Rigidbody, actívalo como Kinematic para evitar conflictos de movimiento.
Para combinar la navegación con la animación, si usas Root Motion, desactiva updatePosition y updateRotation en el agente para evitar «carreras» entre el componente de navegación y la animación.
Más información
Para complementar es recomendable consultar otros documentos.
Esta página está licenciada bajo CC BY-NC-SA 4.0 por Laboratorios Narratech.
Referencias