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
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.
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