R15 collision mayhem is due mostly to custom physics -- not package design

There are definitely packages like the Divine Guardian and Korblox Deathspeaker who have major R15 collision issues due to their packages, but up until recently I thought all packages were at fault for causing some sort of collision issue. It turns out this isn’t the case, and the problem lies with the custom physics ROBLOX uses for R15 humanoids. I imagine the staff already are well aware of this – this is more of an informative post for anyone reporting R15 collision bugs.

Here is an R15 character climbing a staircase with its Humanoid’s RigType set to R15:
https://gfycat.com/AchingCleanDaddylonglegs

Here is that same character climbing a staircase with its Humanoid’s RigType set to R6:
https://gfycat.com/AstonishingRealFantail

As you can see, the R15 character with R6 physics climbs the staircase flawlessly, while the R15 humanoid struggles. Unfortunately it’s not as easy to fix as setting the RigType to R6 because RigType determines how clothing is applied (which is why the character in the second clip is missing clothing), and R6 physics struggle with the small part size of R15 limb segments, causing them to sometimes clip through walls/etc.

16 Likes

Interesting demo. I wonder if it’s physics, or just the animation system. The top guy is actually climbing the stairs at a fairly steady pace, but it looks like something is triggering his walk animation to restart, like possibly a state transition from walk to falling and back, rapidly. I’m encountering something similar while trying to write a custom animation state machine for R15, and the results are similar.

You could add a state change listener to see what’s going on:

humanoid.StateChanged:Connect(function(old,new)
    print(old,"-->",new)
end)

Yeah, the animation script was the first thing I looked at. The problem is twofold:

  1. With R15 physics, the character bounces up and down while using stairs. While going up, it switches between climbing/walking and down is falling/walking.

  2. These rapid state changes change animations rapidly

I tried disabling the climbing/falling animations, and locked walk velocity at 16 (resets to low on state change), and the animation issue (#2) was completely fixed. However, the bouncing problem (#1) was still present, and the character would visibly bounce up and down while using stairs even though the animations were stable. When I switched to R6 physics, I didn’t even have to disable climbing/falling – since the bouncing (#1) was not present, #2 was not an issue.

2 Likes

Yeah, I think you’re right. It does sound like the ground collision checking is the culprit. It’s not as dramatic as “Don’t get propelled into the ceiling”, but the same effect… the character is possibly falling slightly into the stair edges and getting a little overcorrection upwards. Or maybe it’s just slightly elastic collision? I haven’t looked at this system closely enough yet (since I don’t work on) to know if it involves physics engine collisions or not. In my own test world, which uses R15 in the Physics state exclusively, one thing I do on character load is loop over the body parts and set them to have a custom PhysicsProperties with elasticity set to zero. Otherwise, big falls cause the player to bounce into the air rather dramatically, as it’s just a physics system collision. I wonder if that would affect this.

HumanoidRootPart is almost twice as low to the ground in the R15 vs R6. Inserted dummies from the Roblox rig creator plugin.

You can re-adjust the R15 to match the R6 with:

local character = game.Selection:Get()[1] local desiredHipHeight = (2 * character.Humanoid.BodyHeightScale.Value) local difference = desiredHipHeight - character.Humanoid.HipHeight character.Humanoid.HipHeight = desiredHipHeight character.LowerTorso.Root.C1 = character.LowerTorso.Root.C1*CFrame.new(0,difference,0)

1 Like

Just tried it out and didn’t seem to have a noticeable effect.

This seems to decrease the amount the character bounces going up the stairs a lot, but the bouncing is still there (as visible through animations). The hopping that occurs when descending stairs doesn’t seem to improve.

Btw, I thought I included it earlier, but apparently not. Here’s the repro file I’m using: Repro.rbxl (15.7 KB)

1 Like