How to Disable Player Collisions in Roblox Studio — Real Talk Version

So, if you’ve ever dived into Roblox Studio, you probably noticed that by default, players just bump into each other. That’s kind of the point—testing, debugging, making things feel real. But sometimes, you just want those characters to pass right through, especially during custom game modes or when you’re trying to set up a weird mechanic. Honestly, finding where that collision toggle lives isn’t exactly straightforward, and it took me a fair bit of messing around, digging through forums and official docs, to get it all sorted. So, here’s what finally worked for me to turn off player collisions—because yeah, it’s buried somewhere deep in the Explorer or scripts, and not super obvious.

Getting Started in Roblox Studio

First up, open your Roblox Studio project. Make sure your Explorer panel is turned on—if not, just go to View > Explorer. Sometimes it’s hidden and you won’t even realize it, so it’s worth double-checking. If you’re a fan of shortcuts, Alt + V then X does the trick for me. The Explorer shows everything in your game hierarchy, and that’s where you’ll need to be to flip things off.

Next, find ServerScriptService. If it’s not there, double-check that your Explorer is fully expanded. Often, I’ve had it hidden or minimized, and then you scratch your head wondering why you can’t find where to put your code. Right-click ServerScriptService, then choose Insert Object > Script. You can name it something like DisablePlayerCollisions — helpful for future reference. And then, paste in the code. Trust me, this is what finally made the whole blocking thing work reliably.

The Code That Turns Off Collisions

Here’s what I used. It looks pretty brute-force, but it does the job. It loops through all players, then for each pair, toggles their CanCollide property. It’s not the most elegant, but it’s simple enough to get going:

lua
— Turn off collisions between players
local Players = game:GetService(“Players”)
local function setCollision(enable)
for _, player in pairs(Players:GetPlayers()) do
local character = player.Character
if character and character:FindFirstChild(“HumanoidRootPart”) then
local hrp = character.HumanoidRootPart
— Loop through other players
for _, otherPlayer in pairs(Players:GetPlayers()) do
if otherPlayer ~= player then
local otherChar = otherPlayer.Character
if otherChar and otherChar:FindFirstChild(“HumanoidRootPart”) then
local otherHrp = otherChar.HumanoidRootPart
if enable then
— Reset to normal collision
hrp.CanCollide = true
otherHrp.CanCollide = true
else
— Disable collision to allow passing through
hrp.CanCollide = false
otherHrp.CanCollide = false
end
end
end
end
end
end
end
— Call with false to disable collisions
setCollision(false)

I know, it looks kinda silly—looping over everyone and toggling CanCollide. But it’s surprisingly consistent, especially for testing. If a new player joins while collisions are disabled, you might need to rerun setCollision(true) to put things back normal. Also, keep in mind that if your game uses PhysicsService or collision groups, this method can really mess with the setup. That part took me a bit of trial and error. You might want to tweak collision groups instead, but honestly, this quick toggle worked well enough in my case.

Testing and Final Touches

Once you paste the code, I usually close that script—sometimes I forget and leave a messy workspace, which just complicates debugging. Make sure you actually run the game (by hitting Start or Play) and then test moving around with two characters. If everything’s good, they’ll pass through each other, not bumping or blocking. If it’s not working, double-check your script placement—sometimes I put it in the wrong folder or typo a variable—nothing complex, just mistakes that trip you up.

Some Warnings & Extra Tips

This method is definitely a bit of a hack. Roblox doesn’t offer a super straightforward built-in toggle. If you’re using collision groups (via PhysicsService), it’s usually better to set those up properly, especially for more complex games. This script can break if other parts of your game mess with CanCollide properties—or if new players join mid-session, since you need to rerun setCollision(true) to re-enable collisions.

Keep in mind, disabling collisions is mainly handy for debugging or special mechanic testing. In your actual game, you probably want players to collide normally, so always remember to re-enable it. You can even set up a toggle button or admin command that flips this back and forth during runtime, which is kind of useful if you want to switch modes on the fly.

To summarize, here’s what to double-check before you call it a day:

  • Ensure your script is in ServerScriptService or an appropriate server-side location.
  • Make sure you run the game after adding or editing the script.
  • Test with multiple players or NPCs to verify collision toggling works in multiplayer context.
  • If things aren’t working, check for typos or whether your game uses custom collision groups that might override or interfere.

Hope this helps—had me spinning for a while, so maybe this’ll save someone else a few hours too. Good luck, and happy coding!