Making an onClicked script
Introduction
This is a FAQ that will teach you how to make a simple onClicked script. This FAQ will also explain how to put it to use.
What is onClicked?
If you put it inside a brick it will detect when it is clicked.
Instructions
1) Insert a brick onto your map.
2) Insert -> Object -> ClickDetector inside that same brick.
3) Insert a script inside that same brick, but not inside ClickDetector.
4) Double-click the script, and insert the following:
function onClicked() local x = (math.random(0,10) * 0.1) local y = (math.random(0,10) * 0.1) local z = (math.random(0,10) * 0.1) script.Parent.Color = Color3.new (x, y, z) end script.Parent.ClickDetector.MouseClick:connect(onClicked)
The Script
Here is the first part of the scripting:
function onClicked()
This tells the game to set off the function when the brick is clicked on. (This is only an example, so feel free to change this part if you want)
local x = (math.random(0,10) * 0.1) local y = (math.random(0,10) * 0.1) local z = (math.random(0,10) * 0.1) script.Parent.Color = Color3.new (x, y, z)
This tells the game to change the block's color to a random color.
Finally, the script is 'connected':
script.Parent.ClickDetector.MouseClick:connect(onClicked)
Finding Clicker
Even though ClickDetector doesn't have any function arguements so you can't tell who clicked it, it is possible. This is how:
Method 1
This will make it so only one person can click it:
- 1.Make a part. Name it what you like
- 2.Put in 2 Scripts. Name one "CheckScript" and the other "MakeScript"
- 3.Insert a StringValue. Name it "Owner". Change the value to who you want to click on it.
- 4.Put a ClickDetector into the part, set the MaxActivationDistance to 0
- 5.In the "CheckScript", paste this:
dist = 10 --change this to how far away you can be while true do wait(1) local p = game.Players:GetChildren() for i = 1, #p do if (p[i].Name == script.Parent.Owner.Value) then if (game.Workspace:findFirstChild(p[i].Name) ~= nil) then if (p[i].Character.Torso.Position - script.Parent.Position).magnitude < dist then script.Parent.ClickDetector.MaxActivationDistance = dist else script.Parent.ClickDetector.MaxActivationDistance = 0 end end end end end
6.In the "MakeScript", paste this:
dist = 10 --change this to how far away you can be function onClicked() local p = game.Players:GetChildren() for i = 1, #p do if (p[i].Name == script.Parent.Owner.Value) then if (p[i].Character.Torso.Position - script.Parent.Position).magnitude < dist then print("Hello world!") -- this is just an example end end end end script.Parent.ClickDetector.MouseClick:connect(onClicked)
You can simply replace print("Hello world!") with whatever you want this to do.
Method 2
This method will make it so only a team can click on it.
1.Make a part. Name it what you like.
2.Put in 2 Scripts. Name one "CheckScript" and the other "MakeScript"
3.Put a ClickDetector into the part, set the MaxActivationDistance to 0
4.In the "CheckScript", paste this:
dist = 10 --change this to how far away you can be teamcolor = BrickColor.new("Bright yellow") --change this to the team while true do wait(1) local p = game.Players:GetChildren() for i = 1, #p do if (p[i].TeamColor == teamcolor) then if (game.Workspace:findFirstChild(p[i].Name) ~= nil) then if (p[i].Character.Torso.Position - script.Parent.Position).magnitude < dist then script.Parent.ClickDetector.MaxActivationDistance = 10 else script.Parent.ClickDetector.MaxActivationDistance = 0 end end end end end
5.In the "MakeScript", paste this:
dist = 10 --change this to how far away you can be teamcolor = BrickColor.new("Bright yellow") --change this to the team function onClicked() local p = game.Players:GetChildren() for i = 1, #p do if (p[i].TeamColor == teamcolor) then if (p[i].Character.Torso.Position - script.Parent.Position).magnitude < dist then print("Hello world!") end end end end script.Parent.ClickDetector.MouseClick:connect(onClicked)
Change print("Hello world!") to whatever you want.