CanCollideWith does not respect CollisionGroups when Parts are under a WorldModel that is not workspace

When Parts are under a WorldModel that is not workspace CanCollideWith doesn’t respect CollisionGroups and will always return true

Expected behavior

I expect CanCollideWith to return the correct value regardless of which WorldRoot the Parts are under

Script
local function testWithWorldModel()
	local PhysicsService = game:GetService("PhysicsService")
	
	local WorldModel = Instance.new("WorldModel")
	WorldModel.Parent = workspace

	local TEST = "TEST"

	PhysicsService:RegisterCollisionGroup(TEST)
	PhysicsService:CollisionGroupSetCollidable(TEST, TEST, false)

	local part1: Part = Instance.new("Part")
	part1.Name = "part1"
	part1.Parent = WorldModel

	local part2: Part = Instance.new("Part")
	part2.Name = "part2"
	part2.Parent = WorldModel

	part1.CollisionGroup = TEST
	part2.CollisionGroup = TEST

	print("WorldModel", part1:CanCollideWith(part2))
	
	WorldModel:Destroy()
end

local function testWithWorkspace()
	local PhysicsService = game:GetService("PhysicsService")
	
	local TEST = "TEST"
	
	PhysicsService:RegisterCollisionGroup(TEST)
	PhysicsService:CollisionGroupSetCollidable(TEST, TEST, false)
	
	local part1: Part = Instance.new("Part")
	part1.Name = "part1"
	part1.Parent = workspace

	local part2: Part = Instance.new("Part")
	part2.Name = "part2"
	part2.Parent = workspace
	
	part1.CollisionGroup = TEST
	part2.CollisionGroup = TEST
	
	print("Workspace", part1:CanCollideWith(part2))
	
	part1:Destroy()
	part2:Destroy()
end

testWithWorkspace()
testWithWorldModel()
5 Likes

Thanks for the report! We will be working on this soon.