Still have questions? Join our Discord server and get real time help.
0

# Help with my ice scripts that should allow you to fall through, crack, and play crack sound?

Rfrizz -5
2 months ago

So I need help with this ice script. There is 3 scripts, the ice texture, the sound script, and the script for the ice you fall through

so for the sound of the ice breaking this was the script

 function onTouch(hit)
script.Sound:Play()
end


This script had a sound in it btw but the sound didnt play

Then there was this Texture for the ice that was a crack and this was the non working script

function onTouch(hit)

wait(1)
script.Parent.Transparency = 0
end
script.Parent.Touched:connect(onTouch)


The crack texture starts off as invisible and this script should make it visible

This is the script for falling through the ice and it worked but I might as well put it here

function onTouch(hit)

script.Parent.CanCollide = false
script.Parent.Transparency = 1
wait (5)
script.Parent.CanCollide = true
script.Parent.Transparency = 0
end
script.Parent.Touched:connect(onTouch)


0
xPolarium 1337
2 months ago
Edited 2 months ago

You have the idea of how to use the Touched event yet you have multiple scripts with this event to run separate code when you can easily run it in one.

To start, you need to set up the Touched event to only allow player interaction. We can do this by looking for the Humanoid if the Parent of hit has one:

local function onTouch(hit)
local human = hit.Parent:FindFirstChild("Humanoid")

if human then
--code here runs only if we get a character touching
end
end

script.Parent.Touched:Connect(onTouch) --Setup event connection


Simple and easy to read. We then follow the sequence to get a 'ice' breaking effect. This includes the CanCollide and Transparency properties as you had used. I'll also add a cooldown variable to know when to make the ice a solid again.

local iceBlock = script.Parent
local iceCooldown = 5

local sound = iceBlock.Sound --Make sure 'Sound' is a child of the BasePart.

local canTouch = false

local function onTouch(hit)
local human = hit.Parent:FindFirstChild("Humanoid")

if human then
if canTouch then return end --this is a debounce
canTouch = true

iceBlock.Transparency = 1
iceBlock.CanCollide = false
sound:Play()

wait(iceCooldown)

iceBlock.Transparency = 0
iceBlock.CanCollide = true

canTouch = false
end
end

iceBlock.Touched:Connect(onTouch) --Setup event connection


Notice how I included the Sound object. Make sure that this sound object is inside of the part so it can play in 3D space. This makes it so that the sound emits from the position of the part.

You also mention of trying to place a Texture (Decal) on the ice block. If that's the case then you can extend this by adding another wait before setting the Transparency to 1 and Instance.new() the Decal.