We use cookies on this site to enhance your user experience
Collapse Sidebar


The SetPartCollisionGroup function sets the collision group of the specified part to the group with the specified name.

This function is equivalent to setting the BasePart/CollisionGroupId, although this function is the recommended method of configuring a part’s collision group.

Note that for a part to respect its collision filter setting it must have its BasePart/CanCollide property set to true.

This function will throw a runtime error in the following circumstances:

  • The part parameter is not a BasePart instance.
  • The specified group does not exist.


Name Type Default Description

The part being set.

The name of collision group that the part’s collision group is being set to.


Return Type Summary

No return.

Code Samples


This example demonstrates one basic use of collision groups.

The code below attempts to get a group named “Test”, and creates a group this group if it does not already exist. Then, it sets a BasePart|part named Part1’s collision group to “Test”.

If this group is the first collision group you’ve made in your game, it’s Id will be 1.

Parts in the same collision group will interact with other collision groups and with each other a predetermined way. Collision groups can be collidable or not collidable - as set by PhysicsService/CollisionGroupSetCollidable and checked by PhysicsService/CollisionGroupsAreCollidable.

local physicsService = game:GetService("PhysicsService")

-- returns a valid group id (int) or nil
function getGroupId(name)
	-- GetCollisionGroupId will throw if it does not exist
	local ok, groupId = pcall(physicsService.GetCollisionGroupId, physicsService, name)
	return ok and groupId or nil

-- returns a valid group id (int) or nil
function getOrCreateGroupId(name)
	local ok, groupId = pcall(physicsService.GetCollisionGroupId, physicsService, name)
	if not ok then
		-- Create may fail if we have hit the maximum of 32 different groups
		ok, groupId = pcall(physicsService.CreateCollisionGroup, physicsService, name)
	return ok and groupId or nil

-- sets the specified part's collision group to the group with 
-- given group id
function setPartCollisionGroup(part, name)
	physicsService:SetPartCollisionGroup(part, name)

-- returns the id of part's collision
function getPartGroupId(part)
	return part.CollisionGroupId

print("Get 'Test' Group:", getGroupId("Test")) -- prints nil
print("Get/Create 'Test' Group:", getOrCreateGroupId("Test")) -- prints 1
print("Get Id of 'Test' Group:", getGroupId("Test")) -- prints 1
print("Setting Part1's collision group...")
setPartCollisionGroup(game.Workspace.Part1, "Test")
print("Part1's Collision Group Id:", getPartGroupId(game.Workspace.Part1)) -- prints 1