Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How do I make a part explode on collision?

I have a script for a long-range attack and I want to make it create an explosion anytime it collides with ANYTHING because right now, it only explodes when players are directly hit, and just phases through everything else.

I’ve searched far and wide and couldn’t seem to find anything that would help me do this, I’ve only seen people explain how to create explosions when collisions between specific parts occur, but that’d be pretty difficult to do seeing as my map has like 5k of them. Thank you :slight_smile: Here’s the current code i’m using:

	if Switch.Value == false then
		Ki.Parent = Cac.Humanoid
		Ki.CFrame = Cac.HumanoidRootPart.CFrame
		Ki.Position = RHand.Position
		Switch.Value = true
		Cac.Humanoid:LoadAnimation(script.Parent.Parent.Animation):Play()
		local sound = script["Ki blast"]:Clone()
		sound.Parent = Ki	
		sound:Play()
		sound.Script.Disabled = false
		local Part = Ki	
		game.Debris:AddItem(Part, 6)
		local HRP = Player.Character:WaitForChild("HumanoidRootPart")
		local PPosition = RHand.Position + CFrame.new(RHand.Position,Mouse.p).lookVector * 1
		Part.CFrame = CFrame.new(PPosition, Mouse.p)
		Part:SetNetworkOwner(Player)
		local BV = Instance.new("BodyVelocity" , Part)
		BV.Velocity = HRP.CFrame.LookVector * 140
		BV.MaxForce = Vector3.new(1e8,1e8,1e8)
		wait(4)
		Part:destroy()
		return
	end

3 comments

0

my english is bad but can you explain it with some more simple words, or i think you meant when they attack in mid air, it explodes

0

my english is bad but can you explain it with some more simple words, or i think you meant when they attack in mid air, it explodes

0

when I shoot, it goes through other parts, I want it to explode when it hits other parts

3 answers

You can detect collision with BasePart:GetTouchingParts()

First you would need to make the script that detects when you touch it.

Script:

local part = script.Parent -- replace this with your part

part.Touched:Connect(function(hit)
	print('part is toutching ', hit.Name) -- will become explosion script later
end)

That script will print "part is touching [other thing]" in the console

Now we need to work on the explosion

We will need to get the Position of the part first so add this line after printing

local partPos = part.Position

(Btw name the variables anything you want it doesn't matter)

We will also need to create an explosion so add that line as well

local explosion = Instance.new('Explosion')

After that we parent it to your part and set its Position to the part's Position

explosion.Position = partPos
explosion.Parent = part

Finally after the explosion we delete your part

wait(1)
part:Destroy()

Heres the final script! (Note that if the part is touching something already it will trigger the explosion)

local part = script.Parent -- replace this with your part

part.Touched:Connect(function(hit)
	print('part is toutching ', hit.Name)
	local partPos = part.Position
	local explosion = Instance.new('Explosion')
	explosion.Position = partPos
	explosion.Parent = part
	wait(1)
	part:Destroy()
end)

2 comments

1

Yeah! this is great, but is there any way to make it so that it doesn't damage yourself? It does exactly what I want, but I get blown to pieces whenever I shoot

0

You would have to set the "DestroyJointRadiusPercent" to 0. You would add this code after line 7 "explosion.DestroyJointRadiusPercent = 0"

This discussion is preserved as it was. New answers, comments, and votes are closed.