Hello there, I am trying to make a players camera shake whenever they are nearby an explosion in the workspace. Is there a way to make a script that monitors, if there are any explosions in the workspace so then I can add a camerashake. any help is appreciated!
You can connect a function to a ChildAdded event on the workspace, which would call the function when a new instance is added to the workspace, which in this case would be the explosion, or the part that the explosion is in. For example:
workspace.ChildAdded:Connect(function(Child)
if Child.Name == "Explosion" then
print("Explosion Found")
end
end)
Documentation here: Instance | Roblox Creator Documentation
Put this in a local script
local plr = game.Players.LocalPlayer
local pchar = game.Workspace:WaitForChild(plr.Name)
local MinDistance = 50 --Put distance here
function GetDistance(part1: (Instance|Vector3), part2: (Instance|Vector3))
local epos = part1.Position
local hpos = part2.Position
local distV3 = Vector3.new(hpos.X - epos.X, hpos.Y - epos.Y, hpos.Z - epos.Z)
local dist = math.abs((distV3.X + distV3.Y + distV3.Z) / 3)
return dist
end
game.Workspace.DescendantAdded:Connect(function(child)
if child:IsA("Explosion") then
local distance = GetDistance(pchar.Head, child)
print(distance)
if distance < MinDistance then
print("Close Explosion!")
--Code Here
end
end
end)
It gets the distance between two objects / coordinates and will react accordingly! Feel free to remove the prints they are just for testing
This will work in a server script aswell, just change the objects / positions
Edit: I changed ChildAdded to DescendantAdded so it checks in all parts of the workspace when added!
You can simply use magnitude and the camShake module.
You will be cloning the explosion VFX to the workspace in the first place, so you dont need to check if there is an explosion in the workspace
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local hrp = player.Character:WaitForChild("HumanoidRootPart")
local explosion = --cloned explosion VFX
local max_camShake_Distance = 10 --put max shaking distance here
local Magnitude = (hrp.Position - explosion.Position).Magnitude
if Magnitude < max_camShake_Distance then
--do your camera shake magic here
end
Thank you very much the code worked, if you dont mind, can you explain what this part of the code does:
local distV3 = Vector3.new(hpos.X - epos.X, hpos.Y - epos.Y, hpos.Z - epos.Z)
local dist = math.abs((distV3.X + distV3.Y + distV3.Z) / 3)
It subracts the first vector by the second, then converts it to a positive number so that the script can read the distance!