Search code examples
roblox

Roblox - detect if mesh is hit by hand


I am not sure where to start so asking for some help. I want to create a script that detect if a certain mesh is hit by players right hand. Every time the mesh is hit I want to increase points for player by 1.

Anyone who can nudge me in the right direction here?

Thanks!

EDIT:

I have added this script in StarterCharacterScripts:

game.Players.LocalPlayer.Character:WaitForChild("RightHand").Touched:Connect(function(hit)
      local part1 = workspace.CoinsClouds["Meshes/SackOfGoldNoCoins1"] 
      part1.Touched:Connect(function(hit)
        if hit.Name == "RightHand" then 
          print(hit.Name)
        end
      end)
end)

This will register when I bump into the part with the right hand, BUT it will register it 5-20 times in a split second every time I bump into the part with the right hand. See attached image. Anyone know why? I would like it to register only once when the right hand is bumped against the part, or even better, only when the user punch the part/mesh. I have tried to add a wait after RightHand is found, but that doesn't work.

PS! I don't know if this is the right way to script it...

enter image description here


Solution

  • Below is an example of the code you would use. It will check if your part is touched by either the right or left hand and it will run whatever is inside of your if statement, in this case it will increase whatever your score is by 1.

    local part = workspace.Part -- reference the part here
    local debounce = false --used to check for debounce
    
    part.Touched:Connect(function(hit)
        if hit.Name == "RightHand" or "LeftHand" then -- checks if a hand touched it
            if not debounce then  --Check that debounce variable is not true
                debounce = true  --currently touching the part
                
                print("hit")
                
                wait(1)
                debounce = false
            end
        end
    end)
    

    In relation to your new question it is to do with debounce. Roblox has an entire article on it here: https://developer.roblox.com/en-us/articles/Debounce

    Basically you would have to add a new if statement to check that the player isn't already touching this part if it is it wont repeat the what is inside the if statement. The code sample above has been edited to work with debounce.