Enemy AI
Tipo: Exec (In → Out)
Categoría: AI
Nodo prefab todo-en-uno para enemigos. Encapsula detección, patrulla, persecución, cobertura, ataque, huida y muerte en un solo nodo. Ideal para prototipos o enemigos de media complejidad sin necesidad de configurar el sistema modular.
Secciones de propiedades
Básico
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Player |
Enum |
(objetos de escena) |
Objeto del jugador |
| Physics |
Enum |
Character |
Física del enemigo |
| Faction |
String |
"enemy" |
Grupo de facción para compartir alertas |
Stats / Dificultad
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Max HP |
Float (≥1) |
100.0 |
HP base |
| HP × |
Float (≥0.01) |
1.0 |
Multiplicador de HP |
| Damage × |
Float (≥0.01) |
1.0 |
Multiplicador de daño |
| Speed × |
Float (≥0.01) |
1.0 |
Multiplicador de velocidades |
El HP final = Max HP × HP ×. El daño y velocidades también se escalan al compilar.
Detección
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Vision Radius |
Float (≥0.1) |
12.0 |
Rango máximo de visión |
| Vision Angle |
Float (1–360) |
90.0 |
Apertura total del cono de visión |
| Aggro Radius |
Float (≥0.0) |
2.5 |
Radio de detección automática sin LOS |
| Lose Target (s) |
Float (≥0.1) |
3.0 |
Segundos hasta perder el rastro al jugador |
Movimiento
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Patrol Speed |
Float (≥0.0) |
2.0 |
Velocidad de patrulla |
| Chase Speed |
Float (≥0.0) |
4.0 |
Velocidad de persecución |
| Flee Speed |
Float (≥0.0) |
5.0 |
Velocidad de huida |
| Rotation Lerp |
Float (≥0.001) |
0.1 |
Suavizado de rotación |
| Move Smoothing |
Float (0.01–1.0) |
0.12 |
Suavizado de movimiento |
| Obstacle Avoidance |
Bool |
True |
Raycast frontal para esquivar obstáculos |
Waypoints de Patrulla
| Propiedad |
Descripción |
| WP 1 … WP 6 |
Objetos de waypoint en orden de visita |
| Mode |
Loop (circular) o Ping Pong (ida y vuelta) |
Combate
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Attack Type |
Enum |
Melee |
Melee o Ranged |
| Attack Range |
Float (≥0.1) |
2.0 |
Distancia de ataque |
| Cooldown (s) |
Float (≥0.05) |
1.5 |
Segundos entre ataques |
| Damage |
Float (≥0.0) |
10.0 |
Daño por ataque |
| Projectile |
Enum |
(objetos de escena) |
Objeto a addObject() en ataque Ranged |
| Strafe |
Bool |
True |
Moverse lateralmente al perseguir |
Cobertura
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Cover 1 … 4 |
Enum |
(objetos de escena) |
Objetos de cobertura |
| Take Cover at HP % |
Float (0–1) |
0.5 |
Fracción de HP para entrar en cobertura |
| Select By |
Enum |
Nearest |
Criterio de selección (Nearest / Farthest / Best Blocking) |
| Peek Duration (s) |
Float (≥0.1) |
2.0 |
Segundos en cobertura antes de asomarse a atacar |
Thresholds
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Flee at HP % |
Float (0–1) |
0.2 |
Fracción de HP para huir |
| Stagger (s) |
Float (≥0.0) |
0.3 |
Duración del stagger al recibir daño |
| Knockback Force |
Float (≥0.0) |
5.0 |
Fuerza de retroceso al recibir daño |
Group Behavior
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Alert Others |
Bool |
True |
Difundir posición del jugador a enemigos de la misma facción |
Audio
| Propiedad |
Descripción |
| Alert Sound |
Sonido al avistar al jugador |
| Attack Sound |
Sonido al atacar |
| Death Sound |
Sonido al morir |
Animaciones
| Propiedad |
Descripción |
| Idle |
Nombre de la acción en reposo |
| Walk |
Nombre de la acción de movimiento |
| Attack |
Nombre de la acción de ataque |
| Die |
Nombre de la acción de muerte |
| Layer |
Capa de animación de Range |
Muerte / Limpieza
| Propiedad |
Tipo |
Por defecto |
Descripción |
| Death Type |
Enum |
Disappear |
Disappear / Stay / Sink |
| Sink Speed |
Float (≥0.01) |
0.5 |
Velocidad de hundimiento si Sink |
| Drop Object |
Enum |
(objetos de escena) |
Objeto a spawnear al morir |
| Cleanup Delay (s) |
Float (≥0.0) |
3.0 |
Segundos antes de ejecutar la limpieza |
Sockets
| Socket |
Dirección |
Tipo |
| In |
Entrada |
Exec |
| Out |
Salida |
Exec |
Estados del prefab
idle → patrol → alert → chase → cover ↔ attack → flee → dead
| Estado |
Condición de entrada |
| idle |
Sin waypoints o perdió al jugador |
| patrol |
Con waypoints, sin jugador visible |
| alert |
Recibió alerta de facción (sin LOS) |
| chase |
Jugador visible, fuera de rango de ataque |
| cover |
HP < cover_threshold y tiene objetos de cobertura |
| attack |
En rango de ataque; tras peek en cobertura |
| flee |
HP < flee_threshold |
| dead |
HP ≤ 0 |
Canal de daño
Enemy AI usa su propio canal, distinto al del sistema modular:
# Para dañar a este enemigo:
Range.logic.globalDict['_ai_dmg_' + enemy.name] = cantidad
# Con knockback:
Range.logic.globalDict['_ai_dmg_' + enemy.name] = cantidad
Range.logic.globalDict['_ai_dmg_src_' + enemy.name] = list(fuente.worldPosition)
No usar _dmg_<nombre> — ese canal es del Damage Receiver del sistema modular.
Variables de escena publicadas (BGE properties)
| Propiedad |
Tipo |
Descripción |
ai_state |
String |
Estado actual (para animaciones nativas) |
ai_hp |
Float |
HP actual |
ai_attacking |
Bool |
True el frame en que ataca |
Comportamiento del grupo (Alert Others)
Cuando el enemigo ve al jugador y Alert Others = True, escribe en:
globalDict['_ai_alert_<faction>'] = [x, y, z]
Otros Enemy AI con la misma Faction y en estado idle leerán esta posición y cambiarán a alert.
Uso típico
Enemigo básico sin waypoints
Player: Player
Physics: Character
Max HP: 80.0
Vision Radius: 12.0
Attack Type: Melee
Damage: 15.0
Cooldown: 1.5
Flee at HP %: 0.2
Death Type: Disappear
Idle: "Idle"
Walk: "Walk"
Die: "Die"
Soldado con cobertura y waypoints de patrulla
Player: Player
WP 1: Patrol_A
WP 2: Patrol_B
Mode: Ping Pong
Cover 1: Cover_Box
Take Cover at HP %: 0.5
Peek Duration: 2.5
Attack Type: Ranged
Projectile: Bullet_Prefab
Comparación con el sistema modular
| Enemy AI (prefab) |
Sistema Modular |
| Un solo nodo |
10–11 nodos |
| Configuración directa |
Requiere conectar nodos |
Canal _ai_dmg_* |
Canal _dmg_* |
| Estados hardcodeados |
Extensible con BTCondition/Custom |
| Ideal para prototipos |
Ideal para producción |
Notas
- Todos los multiplicadores (HP ×, Damage ×, Speed ×) se aplican en compilación, no en runtime. Cambiarlos requiere recompilar el componente.
- Obstacle Avoidance lanza un raycast frontal de 1.5 unidades cada frame — deshabilitar en enemigos simples para ahorrar CPU.
- Si
Faction está vacío, el nodo usa "enemy" por defecto.
- Death Type
Stay deja el cuerpo en escena pero lo detiene (no hace endObject). Disappear llama endObject() tras el delay. Sink lo hunde en Y negativo antes de desaparecer.