The biggest problem here is that now when ever I touch my door it wont CanCollide = false. What I am trying to do here is make the door so that when part is touched, it will no longer collide and part2 will become green. And when you stop touching the door part2 becomes red. I need help pointing out what went wrong because I am very new at scripting. Thanks for help in advance!
local Base = game.Workspace.Parts local Colors = game.Workspace.Parts function onTouched (hit) Base.Transparency = .5 Base.CanCollide = false end script.Parent.Touched:connect(onTouched) if script.Parent.Touched:connect(onTouched) == false then Base.Transparency = 0 Base.CanCollide = true end if Base.CanCollide == false then Colors.BrickColor = BrickColor.new ("Bright green") end if Base.CanCollide == true then Colors.BrickColor = BrickColor.new ("Bright red") end
Make two separate functions.
Base = game.Workspace.Part Colors = game.Workspace.Parts --function onTouched(hit) --end --function onTouchEnded(hit) --end -- I'm using the comment feature to highlight the things that are added on to the script.
Make 2 connection lines for those functions.
Base = game.Workspace.Part Colors = game.Workspace.Parts function onTouched(hit) end function onTouchEnded(hit) end --script.Parent.Touched:connect(onTouched) --script.Parent.TouchEnded:connect(onTouchEnded)
Fill in your code.
Base = game.Workspace.Part Colors = game.Workspace.Parts function onTouched(hit) -- Base.Transparency = .5 -- Base.CanCollide = false -- Colors.BrickColor = BrickColor.new("Bright green") end function onTouchEnded(hit) -- Base.Transparency = 0 -- Base.CanCollide = true -- Colors.BrickColor = BrickColor.new("Bright red") end script.Parent.Touched:connect(onTouched) script.Parent.TouchEnded:connect(onTouchEnded)
Utilize the 'hit' argument if you don't want a random part to touch the parent of script.
Base = game.Workspace.Part Colors = game.Workspace.Parts function onTouched(hit) -- if (hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid")) then Base.Transparency = .5 Base.CanCollide = false Colors.BrickColor = BrickColor.new("Bright green") -- end end function onTouchEnded(hit) -- if (hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid")) then Base.Transparency = 0 Base.CanCollide = true Colors.BrickColor = BrickColor.new("Bright red") -- end end script.Parent.Touched:connect(onTouched) script.Parent.TouchEnded:connect(onTouchEnded)
If "Base" is the door, and you want the player to touch the door to activate its functions, you can do this if the script is in another location.
Base.Touched:connect(onTouched) Base.TouchEnded:connect(onTouchEnded)
There's this amazing thing called a "Model." It's an object that can group things together, so they'd be relatively separate from other objects in terms of scripting. I would recommend grouping all of the parts that have anything to do with the door such as the indicator and the door part. Doing so will help in terms of organization.
If you do that, you can also set the script to be in the model and adjust your variables so it would be like this:
Base = script.Parent.Part Colors = script.Parent.Parts
That way your script will access to your parts internally (from the scripts' point of view) rather than externally (from the game's point of view).