Why the new collission system performs worse than the old?


I have been using this script for dashing and it's basically setting the character speed to a large value, so with the old UCC it failed 1/10 times it would clip through walls (colliders), but now since I upgraded it clips every single time.

Am I missing something?



Staff member
The collision system in version 3 is an improvement over version 2, but of course there are ways you can get yourself into trouble when creating your own abilities. Did you migrate the ability for version 3? If it never collides then it's likely something that went wrong during the migration process.

If you can tell me how to reproduce the issue within the demo scene I can take a look, but I have unit tests where the character is moving at high speeds and collision works without any problems.
I will need some time to recreate this in a new project but a bit busy currently, will get back to this later this week hopefully

Hi, what the dash ability is doing is simply changing the speed multiplier to 50 and the min to -50, inside update..

SpeedMultiplier is 50
MinSpeedChangeValue is -50
MaxSpeedChangeValue is 50

var inputVector = m_CharacterLocomotion.InputVector;
inputVector.x = Mathf.Clamp(inputVector.x * _dashData[_currentDashIndex].SpeedMultiplier, _dashData[_currentDashIndex].MinSpeedChangeValue, _dashData[_currentDashIndex].MaxSpeedChangeValue);
inputVector.y = Mathf.Clamp(inputVector.y * _dashData[_currentDashIndex].SpeedMultiplier, _dashData[_currentDashIndex].MinSpeedChangeValue, _dashData[_currentDashIndex].MaxSpeedChangeValue);
m_CharacterLocomotion.InputVector = inputVector;

// The raw input vector should be updated as well. This allows other abilities to know if the character has a different speed.
var rawInputVector = m_CharacterLocomotion.RawInputVector;
rawInputVector.x = Mathf.Clamp(inputVector.x * _dashData[_currentDashIndex].SpeedMultiplier, _dashData[_currentDashIndex].MinSpeedChangeValue, _dashData[_currentDashIndex].MaxSpeedChangeValue);
rawInputVector.y = Mathf.Clamp(inputVector.y * _dashData[_currentDashIndex].SpeedMultiplier, _dashData[_currentDashIndex].MinSpeedChangeValue, _dashData[_currentDashIndex].MaxSpeedChangeValue);
m_CharacterLocomotion.RawInputVector = rawInputVector;
That can easily be replicated by just setting these values in the inspector.

It works when the collider is a straight wall but try a ramp and the character will go through it 10/10 times.

I tried the old version of the controller on the same ramp and it only goes through it 10% of the times while now its 100%.

This is the ramp: