I just want to teleport the player to its spawn when it touches a brick but I am getting the error humanoid is not a valid member of MeshPart Code:
function touch(hit) humanoid = hit.Parent.HumanoidRootPart hit.humanoid.CFrame = CFrame(game.Workspace.SpawnLocation.Position) end script.Parent.Touched:connect(touch)
There are a few problems; let's go through them in order.
1.
:connect()
is now deprecated (this may not work as expected and could be removed at any time). Instead, use :Connect()
.
The difference is capitalising the C
.
2.
As DemonizedOverlord said, you need to check for the HumanoidRootPart
before actually getting it, as it will error if you try to get something that doesn't exist.
script.Parent.Touched:Connect(function(Hit) local Root = Hit.Parent:FindFirstChild("HumanoidRootPart") -- Save it to a variable so you can use it later on quickly if Root then -- Do stuff with Root end end)
3.
There is no need to add a hit.
before using the humanoid
variable (AKA Root
in my code).
This will just make the code look for a child named humanoid
inside hit
, which isn't what you want, and will usually throw an error.
Root.CFrame = Value
4.
You did not create a CFrame correctly. You must use the CFrame.new()
function, not the library (table) it is stored in.
script.Parent.Touched:Connect(function(Hit) local Root = Hit.Parent:FindFirstChild("HumanoidRootPart") -- Save it to a variable so you can use it later on quickly if Root then Root.CFrame = CFrame.new(game.Workspace.SpawnLocation.Position) end end)
Hope I helped!
~TDP
You have to check if humanoid exists otherwise it will run the function if a part touches it and it will check for humanoid in the part.
Edit: I noticed a mistake my bad.
function touch(hit) if hit.Parent:FindFirstChild("Humanoid") ~= nil then hit.Parent.HumanoidRootPart.CFrame = CFrame.new(Vector3.new(game.Workspace.SpawnLocation.Position)) end end script.Parent.Touched:connect(touch)