I was trying to test Tags and Collection Service. I have set-up the Tag using the Instance Tagging, and then added a block (say, Block1) to the tag.
On ServerScriptService, I have created a script with the following code:
local CollectionService = game:GetService("CollectionService") local CollectionName = "PoppingBlocks" --The name of the Tag local function onTouch() print("Touched object") end for _, object in pairs(CollectionService:GetTagged(CollectionName)) do object.Touched:Connect(onTouch) end
Expected: When I touch the object, console must print "Touched object"
Touching the object does not do anything. Furthermore, how do I pass more parameters on Touched event?
local CollectionService = game:GetService("CollectionService") local CollectionName = "PoppingBlocks" --The name of the Tag local function onTouch(object) print("Touched object " .. object.Name) end for _, object in pairs(CollectionService:GetTagged(CollectionName)) do object.Touched:Connect(onTouch(object)) --??? end
???: Doesn't the Touch event send 'hit' or 'otherpart' as a parameter? What would the 'object' parameter in the Connect() function be?
Also, how do I destroy the block? My original method was applying this script to the block manually, and then calling script.Parent
local this = script.Parent local function onTouch() print("Touched object" .. this.Name .. ") this:Destroy() end this.Touched:Connect(onTouch)
This method simply worked. However, for obvious reasons, it was very tedious. I found myself editing one script, and copy-pasting it to every block I need.
Im gonna try to answer this the best I can
(after the "Expected: When I touch the object, console must print "Touched object"" part) 1st question: object.Touched should work.
If you want to use premade parameters you could do something like this (this should also answer your second question in the comments):
-- code goes inside of the for loop object.Touched:Connect(function(hit) -- you have access to both "hit" and "object" in here print(object:GetFullName() .." Touched ".. hit:GetFullName()) -- getfullname so you can get the path of the object object:Destroy() -- same thing as your request of this:Destroy() end)