Manual/ Ejemplos

Generador de enemigos

Usa una entidad desactivada como plantilla (un "prefab" dentro de la escena) y la copia con Scene.instantiate cada cierto tiempo en un punto aleatorio.

Generador.lua

local Generador = {
    properties = {
        plantilla = "EnemigoPlantilla",
        intervalo = 2.0,
        radio = 10.0,
        maximo = 12,
    }
}

function Generador:Start()
    self.molde = Scene.find(self.plantilla)
    self.reloj = 0
end

function Generador:Update(dt)
    if not self.molde then return end
    self.reloj = self.reloj + dt
    if self.reloj < self.intervalo then return end
    self.reloj = 0

    if #Scene.findAllWithTag("Enemigo") >= self.maximo then return end

    local angulo = Mathf.random(0, 2 * Mathf.pi)
    local punto = self.entity.position + Vec3(math.cos(angulo), 0, math.sin(angulo)) * self.radio
    local enemigo = Scene.instantiate(self.molde, punto)
    enemigo.name = "Enemigo"
    enemigo.tag = "Enemigo"
    enemigo.active = true
end

return Generador

Enemigo.lua

local Enemigo = { properties = { velocidad = 2.5, vida = 50 } }

function Enemigo:Start()
    self.jugador = Scene.find("Jugador")
end

function Enemigo:Update(dt)
    if not self.jugador then return end
    local hacia = self.jugador.position - self.entity.position
    hacia.y = 0
    if hacia:length() > 1.2 then
        self.entity:translate(hacia:normalized() * self.velocidad * dt)
        self.entity:lookAt(self.jugador.position)
    end
end

function Enemigo:Dano(cantidad)   -- lo llama Disparo.lua
    self.vida = self.vida - cantidad
    if self.vida <= 0 then
        Audio.playOneShot("Audio/explosion.wav", self.entity.position)
        self.entity:destroy()
    end
end

return Enemigo

¿Algo no queda claro o falta algo? Pregunta en el Discord.