PhysicsService player non-collide script gives error

I’m following along with the tutorial that teaches how to make players not collide with one another according to Collisions | Documentation - Roblox Creator Hub.

I made some alterations to help understand the script better, however when the game is run, I receive multiple errors titled PhysicsService::SetPartCollisionGroup() : Passed in Instance parameter has a WorldModel ancestor, seemingly for every part in the character.

local PhysicsService = game:GetService('PhysicsService')
local playerCollisionsGroup = 'Players'

PhysicsService:CreateCollisionGroup(playerCollisionsGroup) -- Contains parts
PhysicsService:CollisionGroupSetCollidable(playerCollisionsGroup, playerCollisionsGroup, false) -- Sets collision group to not collide with self


local Players = game:GetService("Players")

-- personally, too recursive
---------------------------------------------------
local previousCollisionGroups = {}
---------------------------------------------------
local function setCollisionGroup(object)
	if object:IsA('BasePart') then
		previousCollisionGroups[object] = object.CollisionGroupId -- log current collision group
		PhysicsService:SetPartCollisionGroup(object, playerCollisionsGroup) -- replace with new collision group
	end
end

local function setCollisionGroupRecursive(object)
	setCollisionGroup(object)
	
	for i,v in ipairs(object:GetChildren()) do
		setCollisionGroupRecursive(v)
	end
end

local function resetCollisionGroup(object)
	local previousCollisionGroupId = previousCollisionGroups[object] -- original collision group
	if not previousCollisionGroupId then return end
	
	local previousCollisionGroupName = PhysicsService:GetCollisionGroupName(previousCollisionGroupId) -- ^^
	if not previousCollisionGroupName then return end
	
	PhysicsService:SetPartCollisionGroup(object, previousCollisionGroupName) -- replace current collision group with original
	previousCollisionGroups[object] = nil -- garbage collection takes care of
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(onCharacterAdded)

Maybe it’s a simple typo, but I can’t seem to solve the error. The script given in the documentation works correctly.

Haven’t checked the rest of your code but your “PlayerAdded” connection is firing the onCharacterAdded function and not the onPlayerAdded function. So you’re passing the player object as an argument to the setCollisionGroupRecursive(), which is basically looping through all the players content and not the actual character.

So change this:

Players.PlayerAdded:Connect(onCharacterAdded)

To this:

Players.PlayerAdded:Connect(onPlayerAdded)
1 Like