For the complete documentation index, see llms.txt. This page is also available as Markdown.

Agentes de movimiento/NPCs

Usa Movement_Agent para mover entidades con búsqueda de rutas y restricciones de navmesh.

Agentes de movimiento

Movement_Agent es un componente auxiliar de movimiento usado para el control direccional y la búsqueda de rutas.

Lo más común es usarlo para:

  • Solicitar una ruta hacia un objetivo (set_path_target)

  • Restringir una entidad al espacio transitable (bloquearla a un Malla de navegación)

  • Moverse a través de geometría simple de colisionadores

Esta página cubre el movimiento y la búsqueda de rutas. Para ver detalles sobre la construcción/consulta de navmeshes y los triggers de colisionadores, consulta Navmesh y colisión.

Referencia de la API de Movement_Agent

Movement_Agent :: class : Component {
    Set_Path_Target_Result :: struct {
        success:        bool;
        next_point:     v2;
        move_direction: v2;
    }

    // Solicitar una ruta hacia el objetivo a una velocidad dada.
    set_path_target :: method(target: v2, speed: float) -> Set_Path_Target_Result;

    // Restringe este agente a una navmesh (encájalo en ella en cada frame).
    // Pasa null para borrar.
    set_navmesh_to_lock_to :: method(navmesh: Navmesh);

    // Ajuste/estado comunes
    movement_speed:   float;
    agent_radius:     float;
    friction:         float;
    velocity:         v2;
    input_this_frame: v2; // solo escritura desde scripts; se pone a cero por la actualización de movimiento antes de que se ejecuten los callbacks (lee player.input_this_frame en su lugar)
}

Física y triggers de movimiento de CSL

Las entidades Movement_Agent tienen una ruta de física CSL para el movimiento balístico simple.

Colisión: los colisionadores no trigger habilitados del agente bloquean contra los colisionadores no trigger del mundo habilitados, teniendo en cuenta category_bits / mask_bits el filtrado. El movimiento se detiene en el primer impacto y se desliza a lo largo de la superficie impactada.

Dos colisionadores interactúan solo cuando la mask_bits contiene la del otro category_bits (ambas son bitmasks u32). Los colisionadores tienen por defecto category_bits: 1, mask_bits: 4294967295. El colisionador del jugador es category_bits: 2 con los campos mask_bits = todo excepto el bit 2 (los jugadores no colisionan entre sí). Deja los valores predeterminados como están a menos que necesites capas: una pared con mask_bits: 1 o category_bits: 2 no bloquea al jugador.

Los callbacks de trigger pertenecen al colisionador y no requieren un Movement_Agent.

Búsqueda de rutas (establecer un objetivo)

Llama a set_path_target en cada frame mientras la entidad deba seguir moviéndose. Una sola llamada no es un comando de movimiento persistente.

set_path_target se procesa de forma asíncrona con otros agentes. El resultado devuelto es el dato de búsqueda de ruta completado más reciente, por lo que el primer frame en que estableces un nuevo objetivo puede no devolver success == true.

Bloquear el movimiento a una navmesh (permanecer en el espacio transitable)

Si una entidad nunca debe salir del espacio transitable, bloquéala a una navmesh:

Llámalo con null para borrarlo.

Creación de NPCs en movimiento

Este es un NPC mínimo de “seguir al jugador” que usa un agente de movimiento:

Última actualización