Disparo con raycast
Al hacer clic, lanza un rayo desde la cámara hacia delante y empuja lo que toque.
Disparo.lua
local Disparo = {
properties = {
alcance = 100.0,
fuerza = 12.0,
cadencia = 0.15, -- segundos entre disparos
}
}
function Disparo:Start()
self.espera = 0
end
function Disparo:Update(dt)
self.espera = self.espera - dt
if not Input.getMouseButton(0) or self.espera > 0 then return end
self.espera = self.cadencia
local origen = self.entity.position
local dir = self.entity.forward
Audio.playOneShot("Audio/disparo.wav", origen, 0.7)
local hit = Physics.raycast(origen, dir, self.alcance)
if hit then
Debug.log("Impacto en", hit.entity.name, "a", string.format("%.1f m", hit.distance))
if hit.entity:hasComponent("Rigidbody") then
hit.entity:addForce(dir * self.fuerza, "impulse")
end
local objetivo = hit.entity:getScript()
if objetivo and objetivo.Dano then objetivo:Dano(25) end
end
end
return Disparo
¿Algo no queda claro o falta algo? Pregunta en el Discord.