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

What did I do wrong that doesn't make the part CanCollide?

I am just making a random script from what I know basically. I am making a part, which I named ScriptedPart, to where when I hit G it CanCollides, and if I hit H, it like goes back to normal. This is what I put so far:

local part = game.Workspace.ScriptedPart

function part(OnTouched)	
		if part.CanCollide == Enum.KeyCode.G then
			part.CanCollide = false
		if part.CanCollide == Enum.KeyCode.H then
			part.CanCollide = true
		end
	end
end

I hope I gave a clear explanation.

2 answers

✓ Accepted answer

That's not how you use UserInputService!

To use it, since it's a service, direct an InputBegan function from it.

UIS = game:GetService("UserInputService")
-- Use a LocalScript.

function ChangeCollision(InputObject)
	-- An "InputObject" is returned from here.
end

UIS.InputBegan:connect(ChangeCollision)

An InputObject has KeyCode as its member, so you can (from there) interpret whether the key pressed is the same as the key you intend the players to press (such as "G" or "H" in your case).

UIS = game:GetService("UserInputService")

function ChangeCollision(InputObject)
	if InputObject.KeyCode == Enum.KeyCode.G then
		
	elseif InputObject.KeyCode == Enum.KeyCode.H then
		
	end
end

UIS.InputBegan:connect(ChangeCollision)

Now you can do the rest!

UIS = game:GetService("UserInputService")
Part = workspace.ScriptedPart

function ChangeCollision(InputObject)
	if InputObject.KeyCode == Enum.KeyCode.G then
		Part.CanCollide = false
	elseif InputObject.KeyCode == Enum.KeyCode.H then
		Part.CanCollide = true
	end
end

UIS.InputBegan:connect(ChangeCollision)

NOTE: If you don't want your function to be fired while you're chatting, click here!


If you want to make your part activate the function along with the .Touch event, then use the .Touch event to, in a sense, "activate" the .InputBegan event.

Keep in mind that the .Touch event is a super sensitive and touchy (haha) one. So it might glitch.

Player = game.Players.LocalPlayer
-- This makes sure that YOU'RE the only one that can do it
UIS = game:GetService("UserInputService")
Part = workspace.ScriptedPart
CanChangeCollision = false

function ChangeCollision(InputObject)
	if CanChangeCollision then
		if InputObject.KeyCode == Enum.KeyCode.G then
			Part.CanCollide = false
		elseif InputObject.KeyCode == Enum.KeyCode.H then
			Part.CanCollide = true
		end
	end
end

function Switch(Boolean)
	if Boolean then
		CanChangeCollision = true
	else
		CanChangeCollision = false
	end
end

function VerifyHit(hit)
	HumanoidIsFound = hit.Parent and hit.Parent:FindFirstChild("Humanoid")
	PlayerIsFound = game.Players:GetPlayerFromCharacter(hit.Parent)
	if HumanoidIsFound and HumanoidIsFound.Health > 0 and PlayerIsFound and PlayerIsFound == Player then
		return true
	else
		return false
	end
end

Part.Touched:connect(function(hit)
	if VerifyHit(hit) then
		Switch(true)
	end
end)

Part.TouchEnded:connect(function(hit)
	if VerifyHit(hit) then
		Switch(false)
	end
end)

UIS.InputBegan:connect(ChangeCollision)

2 comments

0

Thanks man. It worked really good. :D

0

You're welcome. :)

You're problem is is that it never calls the touched function. To fix this, just call the touched function, or try using part.Touched:connect(function(), and changing your end to end).

CODE:

local part = game.Workspace.ScriptedPart

part.Touched:connect(function() 
        if part.CanCollide == Enum.KeyCode.G then
            part.CanCollide = false
        if part.CanCollide == Enum.KeyCode.H then
            part.CanCollide = true
        end
    end
end)

OR:

local part = game.Workspace.ScriptedPart

function part(OnTouched)    
        if part.CanCollide == Enum.KeyCode.G then
            part.CanCollide = false
        if part.CanCollide == Enum.KeyCode.H then
            part.CanCollide = true
        end
    end
end

part.Touched:connect(part)

3 comments

0

May want to take another look at the codes: Lines 4 and 6. :)

0

right..

0

I will upvote even though it didn't work. But thanks for helping me. :D

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