Volver a la página principal
martes 11 marzo 2025
2

Cómo mover personajes con NavMeshAgent en Unity

El NavMeshAgent en Unity es un componente utilizado para que los personajes o entidades naveguen por un entorno utilizando NavMesh (malla de navegación). Este sistema permite que los personajes se desplacen de manera realista, evitando obstáculos y siguiendo rutas definidas.

¿Qué es NavMeshAgent en Unity?

El NavMeshAgent es un componente de Unity que se usa para mover objetos en un entorno de navegación basado en NavMesh. Este agente calcula la ruta óptima hacia un destino, teniendo en cuenta obstáculos y áreas de navegación definidas en la escena.

Características principales:

  • Permite el movimiento automático en un NavMesh.
  • Evita obstáculos y sigue caminos optimizados.
  • Soporta diferentes velocidades y radios de colisión.
  • Se puede combinar con animaciones para un desplazamiento más realista.

Cómo usar NavMeshAgent en Unity

Para usar NavMeshAgent, sigue estos pasos:

1. Añadir NavMesh a la escena:

  • Abre el Navigation Window desde Window > AI > Navigation.
  • Selecciona el terreno o los objetos estáticos y márcalos como Navigation Static.
  • Genera la malla de navegación (Bake).

2. Agregar el componente NavMeshAgent:

  • Selecciona el personaje u objeto que se moverá.
  • Añade el componente NavMeshAgent desde Inspector > Add Component > Navigation > NavMeshAgent.

3. Mover el agente con un script:

using UnityEngine;
   using UnityEngine.AI;

   public class MoveAgent : MonoBehaviour
   {
       public Transform target;
       private NavMeshAgent agent;

       void Start()
       {
           agent = GetComponent<NavMeshAgent>();
           agent.destination = target.position;  // Asigna el destino al agente
       }
   }

En este ejemplo, el NavMeshAgent se moverá automáticamente hacia el target.

Propiedades principales de NavMeshAgent

Propiedad Descripción
destination Define el destino del agente.
speed Velocidad de movimiento del agente.
acceleration Aceleración del agente.
stoppingDistance Distancia mínima antes de detenerse.
isStopped Detiene o reanuda el movimiento.

Ejemplo de movimiento dinámico

Para cambiar la posición objetivo en tiempo de ejecución:

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        
        if (Physics.Raycast(ray, out hit))
        {
            agent.destination = hit.point;
        }
    }
}

Este código permite que el agente se mueva a la posición donde haga clic el jugador.

Referencia oficial

Puedes consultar más información en la documentación oficial de Unity:

Etiquetas:
csharp unity
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer