Need help with Player Collision Filter

You’re trying to set the collision groups of the player, not the character. Try this instead:

CODE VERSION 1
local PhysicsService = game:GetService("PhysicsService")

local obstacles = "Obstacle"
local greenObjects = "Green"
local playerCollisionGroupName = "Players"

PhysicsService:CreateCollisionGroup(obstacles)
PhysicsService:CreateCollisionGroup(greenObjects)
PhysicsService:CreateCollisionGroup(playerCollisionGroupName)

PhysicsService:SetPartCollisionGroup(workspace.barrier, obstacles)
PhysicsService:SetPartCollisionGroup(playerCollisionGroupName, obstacles)

PhysicsService:CollisionGroupSetCollidable(obstacles, playerCollisionGroupName, false)
PhysicsService:CollisionGroupSetCollidable(greenObjects, obstacles, false)

local previousCollisionGroups = {}

--go through every descendant of the character and make any part part of the player collision group
function setCollisionGroup(character)	
	for _, desc in pairs(character:GetDescendants()) do
		if desc:IsA("BasePart")then
			previousCollisionGroups[desc] = desc.CollisionGroupId
			PhysicsService:SetPartCollisionGroup(desc, playerCollisionGroupName)
		end
	end
end

--set charater's collisions when they load into the map:
game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
		setCollisionGroup(character)
	end)
end)

EDIT: it was erroring because
playerCollisionGroupName is not a part in
PhysicsService:SetPartCollisionGroup(playerCollisionGroupName, obstacles)
and it’s expecting a part.

made it instead:
PhysicsService:CollisionGroupSetCollidable(playerCollisionGroupName, obstacles, true)
and seems to work fine.

change this to true/false depending on if you want the players to collide with obstacles

CODE VERSION 2:
local PhysicsService = game:GetService("PhysicsService")

local obstacles = "Obstacles"
local greenObjects = "GreenObjects"
local player = "Player"

PhysicsService:CreateCollisionGroup(obstacles)
PhysicsService:CreateCollisionGroup(greenObjects)
PhysicsService:CreateCollisionGroup(player)

PhysicsService:SetPartCollisionGroup(workspace.barrier, obstacles)
PhysicsService:CollisionGroupSetCollidable(greenObjects, obstacles, false)
PhysicsService:CollisionGroupSetCollidable(player, obstacles, false)

local previousCollisionGroups = {}

function setCollisionGroup(model)
	for _, desc in pairs(model:GetDescendants()) do
		if desc:IsA("BasePart")then
			previousCollisionGroups[desc] = desc.CollisionGroupId
			PhysicsService:SetPartCollisionGroup(desc, player)
		end
	end
end

for _,desc in pairs(workspace:GetDescendants())do
	if desc.Name== "Boat" then
		local Boat = desc
		setCollisionGroup(Boat, greenObjects)	
	end
end

game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
		setCollisionGroup(character, player)
	end)
end)
2 Likes