Categoría AI
La categoría AI contiene los nodos de inteligencia artificial de Range Node Core. Cubren desde comportamientos de movimiento primitivos hasta un sistema modular completo de percepción, estados, navegación y combate.
Dos enfoques
Enfoque prefab — Enemy AI
Un único nodo Enemy AI que encapsula toda la lógica: detección, patrulla, persecución, cobertura, ataque, huida y muerte. Ideal para prototipos rápidos o enemigos simples.
Enfoque modular — Sistema Enemy
Once nodos especializados que se pueden combinar y sustituir de forma independiente. Cada nodo publica variables ai_* que los demás leen vía getattr. El orden de ejecución está predefinido por execution_order.
[OnUpdate]
│
├── [Enemy Perception] execution_order=40
├── [Damage Receiver] execution_order=42
├── [AI State Machine] execution_order=50
├── [Enemy Decision] execution_order=51 (branch)
├── [Navigation Pathfinder] execution_order=52
├── [Navigation Follow Path]execution_order=54
├── [Enemy Movement] execution_order=55
├── [Enemy Rotation] execution_order=56
├── [Enemy Combat] execution_order=58
├── [Enemy Animation] execution_order=60
└── [Enemy Hit Flash] execution_order=62
Nodos de movimiento primitivo
Seek, Flee, Patrol y Wander son nodos autónomos que no dependen del sistema modular. Se pueden usar solos o combinados con BTCondition/BT nodes.
Contrato de variables ai_*
Las variables ai_* son atributos de self (el componente Python). Se leen con getattr(self, 'ai_*', default) para evitar errores si el nodo fuente no está en la escena.
| Variable | Dueño (WRITES) | Tipo | Descripción |
|---|---|---|---|
ai_can_see |
Enemy Perception | bool | Target visible este frame |
ai_has_line_of_sight |
Enemy Perception | bool | Raycast sin obstáculos al target |
ai_dist |
Enemy Perception | float | Distancia XY al target |
ai_target |
Enemy Perception | KX_GameObject|None | Objeto target |
ai_target_pos |
Enemy Perception | Vector|None | Posición del target si visible |
ai_last_seen_pos |
Enemy Perception | Vector|None | Última posición vista (persiste) |
ai_hp |
Damage Receiver | float | HP actual |
ai_hp_max |
Damage Receiver | float | HP máximo |
ai_is_dead |
Damage Receiver | bool | True cuando HP ≤ 0 |
ai_took_damage |
Damage Receiver | bool | True el frame en que llegó daño |
ai_recent_damage |
Damage Receiver | bool | Alias de ai_took_damage |
ai_state |
AI State Machine | str | Estado actual del SM |
ai_prev_state |
AI State Machine | str | Estado anterior |
ai_state_time |
AI State Machine | float | Segundos en estado actual |
ai_alert_level |
AI State Machine | float | 0–1 para HUD/shader |
ai_attack_requested |
AI State Machine | bool | True cuando estado == ATTACK |
ai_reload_requested |
AI State Machine | bool | True sin ammo y no DEAD |
ai_move_target |
AI State Machine / Navigation Follow Path | Vector|None | Destino de movimiento |
ai_in_attack_range |
Enemy Combat | bool | Distancia ≤ Attack Range |
ai_is_moving |
Enemy Movement | bool | Velocidad > 0.1 |
ai_nav_path |
Navigation Pathfinder | list[Vector] | Camino BFS actual |
ai_nav_index |
Navigation Pathfinder / Follow Path | int | Índice del waypoint actual |
ai_reached_destination |
Navigation Follow Path | bool | Path completado |
Canales de daño (globalDict)
| Canal | Escribe | Lee |
|---|---|---|
_dmg_<nombre> |
EnemyCombat, Player Hitscan | Damage Receiver |
_ai_dmg_<nombre> |
EnemyAI (melee/ranged) | EnemyAI (prefab interno) |
_ai_dmg_src_<nombre> |
EnemyAI (knockback) | EnemyAI (prefab interno) |
Importante: Los canales
_dmg_*y_ai_dmg_*son distintos. El sistema modular usa_dmg_*; el prefab Enemy AI usa_ai_dmg_*para su propio sistema interno.
Nodos en esta categoría
Movimiento primitivo
| Nodo | Tipo | Descripción |
|---|---|---|
| Seek | Exec | Perseguir objetivo con frenado de llegada |
| Flee | Exec | Huir del objetivo hasta radio seguro |
| Patrol | Exec | Patrullar entre 2–8 waypoints |
| Wander | Exec | Deambular en dirección aleatoria periódica |
Detección
| Nodo | Tipo | Descripción |
|---|---|---|
| Distance Check | Branch (Near/Far) | Bifurcar por distancia al objetivo |
| Line Of Sight | Branch (Visible/Hidden) | Raycast de línea de visión |
Sistema Modular
| Nodo | Exec Order | Descripción |
|---|---|---|
| Enemy Perception | 40 | FOV + raycast + memoria |
| Damage Receiver | 42 | HP y canal de daño |
| AI State Machine | 50 | Máquina de estados IDLE→DEAD |
| Enemy Decision | 51 | Branch por ai_can_see |
| Navigation Pathfinder | 52 | BFS sobre waypoints |
| Navigation Follow Path | 54 | Seguir path, detección de bloqueo |
| Enemy Movement | 55 | Movimiento suavizado |
| Enemy Rotation | 56 | Rotación suave hacia target |
| Enemy Combat | 58 | Ataque con cooldown |
| Enemy Animation | 60 | Animaciones por estado |
| Enemy Hit Flash | 62 | Flash de color al recibir daño |
Prefab
| Nodo | Descripción |
|---|---|
| Enemy AI | Todo-en-uno: estados, detección, movimiento, combate, animaciones |