- Home /
Colliders going through walls
Hi!
I'm having problems with colliders going through walls on some occasions. I have NPC that I can push, so they go in some ragdoll mode, I enable colliders, add rigidbodies on the fly(because I found that it's better for performance than having some constantly that don't really sleep), do the connections with joints and add some force to the hips. But sometimes if the NPC is close to a wall when it is pushed, it's going through it. I tried to set the detection mode to continuous dynamic or continuous with no success. I may have more success with an higher physic framerate but I fear that less than 0.02 for my project would generate spikes (developping a 3d game for mobile). Beside it only happens on the creation, after some frames, bodies never go trough walls.
Here is the code that generate the hips rigidbody and add force:
public void Enable(Vector3 direction, float velocity)
{
Rigidbody rigid = gameObject.AddComponent<Rigidbody>();
rigid.mass = mass;
rigid.angularDrag=0;
rigid.collisionDetectionMode=CollisionDetectionMode.ContinuousDynamic;
rigid.AddForce(direction*Mathf.Max(velocity*15f, 35f), ForceMode.Impulse);
}
And for the rest of the body:
public void Enable(Vector3 direction, float velocity)
{
Rigidbody rigid = gameObject.AddComponent<Rigidbody>();
rigid.mass = mass;
rigid.angularDrag=0;
rigid.collisionDetectionMode=CollisionDetectionMode.ContinuousDynamic;
CharacterJoint joint = gameObject.AddComponent<CharacterJoint>();
joint.connectedBody=boneParent.GetComponent<Rigidbody>();
joint.lowTwistLimit=lowTwistLimit;
joint.highTwistLimit=highTwistlimit;
joint.swing1Limit=swing1Limit;
}
They are all called at the same frame, hips first and the others in a for loop after.
I just tried to add the force in a coroutine after a couple WaitForFixedUpdate(), that solve nothing.
Set the physics rate to 0.01 neither. Help!!
Answer by barbe63 · May 27, 2015 at 08:38 AM
Solved it but it's a bit desapointing. The WaitForfixedUpdate thing wasn't a bad idea but I needed more of it. So to have consistancy I replaced it by WaitForSeconds(0.07f), and it is working as intented now. I removed the detection mode lines and set the physics rate to 0.025 and that's good. WaitForSeconds(0.06f) don't do the job so it's a matter of tweaking it right.
It seems Unity needs some time to calculate efficiently newly created rigidbodies.