- Home /
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.
Answer by efge · Mar 18, 2011 at 02:29 PM
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.
Thank you, this makes sense, I will post the code here after I get it working.
Your answer
![](https://koobas.hobune.stream/wayback/20220613113341im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Get angle to retarget collision object. 1 Answer
Deal Damage On Collision 3 Answers
Health system final 1 Answer
Add Object to a Variable Only When In Range 1 Answer
Collision Normal 1 Answer