x


Head on collision vs skinning the wall.

Trying to get the force of an impact in a low altitude racing game. I wish to make my collision detection more robust. RIght now I get the same magnitude returned regaurdless of the colliding objects attack angle.

I am using:

function OnCollisionEnter(collision : Collision) {
    if (collision.relativeVelocity.magnitude > 16){
    // go boom
   } else {
    // make sparks
   }
}

It detecects collision and things blow up well.

However when a collision is very shallow in angle it is still detected as big collision, not as sliding down the wall. I recieve the same relativeVelocity.magnitude for hitting a wall head on as for glancing it with at a very light attack angle. How should someone calculate collision magnitude adjusted for the angle of the incoming force.

EDIT: this is working, thanks to efge's answer:

function OnCollisionEnter(collision : Collision) {
    var tempCount=0;
    var angleTot=0;
    var damageTot=0;
    for (var contact : ContactPoint in collision.contacts) {
        // finds the avrg of the difference of the angles of 
        // the Contact points from our transform's forward
        tempCount++;
        var angle = Vector3.Angle(contact.normal, transform.forward);
        angleTot+=angle;
        damageTot+=collision.relativeVelocity.magnitude;
    }
    Debug.Log ("avg angle:"+angleTot/tempCount+"  avg force:"+damageTot/tempCount+"  Adjusted force:"+damageTot/tempCount*angleTot/tempCount/180);
    //blow up or not based on adjusted force
}

it might be better to calculate baced on traveling direction (forces) than player rotation, but this feels good.

more ▼

asked Mar 17 '11 at 10:24 AM

Mofy gravatar image

Mofy
23 1 2 8

(comments are locked)
10|3000 characters needed characters left

1 answer: sort newest

You could compare the ContactPoint.normal with the driving direction (or the velocity vector of the rigidbody).


Edit:

In the function OnCollisionEnter you could use Collision.relativeVelocity and ContactPoint.normal.
Maybe you have to normalize the vectors to set its length to 1.0.

more ▼

answered Mar 18 '11 at 02:29 PM

efge gravatar image

efge
5.1k 5 14 38

Thank you, this makes sense, I will post the code here after I get it working.

Mar 21 '11 at 11:20 AM Mofy
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x2505
x288
x248
x83
x59

asked: Mar 17 '11 at 10:24 AM

Seen: 1277 times

Last Updated: Mar 27 '11 at 04:02 PM