Saltar a contenido

Drone AI

Tipo: Acción
Categoría: AI

Controla un dron volador autónomo en 3D. Implementa un comportamiento de Seek + Evasión de Obstáculos ponderada, manteniendo una altura y distancia horizontal configurables respecto al objetivo. Coloca en el objeto dron y conecta a On Update.

Propiedades

Target

Propiedad Por defecto Descripción
Target Objeto a seguir en la escena

Movement

Propiedad Por defecto Descripción
Speed 4.0 Velocidad máxima de vuelo
Vel Lerp 0.08 Suavizado de velocidad (1 = instantáneo, menor = más inercia)
Rot Lerp 0.05 Suavizado de rotación hacia el objetivo

Positioning

Propiedad Por defecto Descripción
Hover Height 3.0 Altura sobre el objetivo
Follow Distance 5.0 Distancia horizontal mantenida
Height Deadzone 0.3 Diferencia vertical mínima para corregir altura

Obstacle Avoidance

Propiedad Por defecto Descripción
Probes 6 — Full Número de raycasts de evasión: 6 — Full o 2 — Minimal (perf)
Avoid Radius 2.0 Rango de detección de obstáculos
Avoid Weight 1.5 Peso de la dirección de evasión frente a la de seguimiento

Sockets

Socket Dirección Tipo
In Entrada Exec
Out Salida Exec

Código generado (simplificado)

import mathutils as _mu
_dt = Range.logic.deltaTime()
if not hasattr(self, '_drone_rdy'):
    self._drone_rdy = True
    self._drone_vel = _mu.Vector((0.0, 0.0, 0.0))
    self._drone_probes = (
        _mu.Vector(( 1, 0, 0)), _mu.Vector((-1, 0, 0)),
        _mu.Vector(( 0, 1, 0)), _mu.Vector(( 0,-1, 0)),
        _mu.Vector(( 0, 0, 1)), _mu.Vector(( 0, 0,-1)),
    )
_drone_target = self.own.scene.objects.get('player')
# ... Seek hacia target + altura
# ... Raycasts de evasión en 6 direcciones
# _drone_steer = seek_dir + avoid_dir * avoid_weight
self._drone_vel = self._drone_vel.lerp(_drone_steer * 4.0, 0.08)
self.own.applyMovement(self._drone_vel * _dt, False)
# Rotación suave en Yaw hacia el objetivo

Uso típico

Dron de vigilancia

[On Update] → [Drone AI:
                   Target=player
                   Speed=5.0
                   Hover Height=4.0
                   Follow Distance=6.0
                   Avoid Radius=2.5]

Dron de bajo rendimiento (zonas con muchos objetos)

[On Update] → [Drone AI:
                   Target=player
                   Speed=3.0
                   Probes=2 — Minimal]

Notas

  • El objeto debe tener física No Collision o Ghost para moverse libremente en 3D.
  • applyMovement en espacio mundo (False) — el dron no hereda rotación del objeto padre.
  • Probes=Minimal usa solo 2 raycasts (adelante + abajo) para mayor rendimiento.
  • Para múltiples drones, cada objeto tiene su propio estado _drone_* gracias a hasattr.