Hi, I made a No-Collide script for players, for some reason it doesn’t wanna work. I don’t know what I’ve done wrong.
Here’s the code:
local pyService = game:GetService("PhysicsService")
local PlayerGroup = pyService:CreateCollisionGroup("Players")
pyService:CollisionGroupSetCollidable("Players", "Players", false)
function CanCollide(model)
for x, v in pairs(model:GetChildren()) do
if v:IsA("BasePart") then
pyService:SetPartCollisionGroup(v, "Players")
end
end
end
game.Players.PlayerAdded:Connect(function(Plr)
Plr.CharacterAdded:Connect(function(character)
CanCollide(character)
end)
end)
I assume the reason is because the character appearance isn’t fully loaded yet when you fire the CanCollide
function so some character meshes are left out. You can try to switch Plr.CharacterAdded
with Plr.CharacterAppearanceLoaded
event which fires when all objects in the character model are loaded instead of when the character model is added without anything inside it.
9 Likes
You can also do Player:WaitForChild(“Character”)
Edit it does not work, try other solutions here.
Try use this:
local PhysicsService = game:GetService("PhysicsService")
local Players = game:GetService("Players")
local playerCollisionGroupName = "Players"
PhysicsService:CreateCollisionGroup(playerCollisionGroupName)
PhysicsService:CollisionGroupSetCollidable(playerCollisionGroupName, playerCollisionGroupName, false)
local previousCollisionGroups = {}
local function setCollisionGroup(object)
if object:IsA("BasePart") then
previousCollisionGroups[object] = object.CollisionGroupId
PhysicsService:SetPartCollisionGroup(object, playerCollisionGroupName)
end
end
local function setCollisionGroupRecursive(object)
setCollisionGroup(object)
for _, child in ipairs(object:GetChildren()) do
setCollisionGroupRecursive(child)
end
end
local function resetCollisionGroup(object)
local previousCollisionGroupId = previousCollisionGroups[object]
if not previousCollisionGroupId then return end
local previousCollisionGroupName = PhysicsService:GetCollisionGroupName(previousCollisionGroupId)
if not previousCollisionGroupName then return end
PhysicsService:SetPartCollisionGroup(object, previousCollisionGroupName)
previousCollisionGroups[object] = nil
end
local function onCharacterAdded(character)
setCollisionGroupRecursive(character)
character.DescendantAdded:Connect(setCollisionGroup)
character.DescendantRemoving:Connect(resetCollisionGroup)
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)
This won’t work because Character
is a property of the Player object, not child.
1 Like
Thank you, I am trying it right now