Как узнать, какая сторона коллайдера была поражена от hit.normal?

В Unity3d я могу получить нормаль поверхности, с которой сталкивается коллайдер, используя hit.normal, но есть ли способ определить, какая сторона была поражена, что предусмотрено в Unity3d?

Одно из решений состоит в том, чтобы увидеть ориентацию нормали, и оно должно хорошо работать для статических объектов, но как насчет динамических и движущихся объектов, ориентация которых меняется?


person SpeedBirdNine    schedule 16.09.2011    source источник


Ответы (2)


Это работает:

function OnCollisionEnter(collision: Collision) {
    var relativePosition = transform.InverseTransformPoint(collision.transform.position);

    if (relativePosition.x > 0) 
    {
        print ("The object is to the right");
    }
    else 
    {
        print ("The object is to the left");
    }

    if (relativePosition.y > 0) 
    {
        print ("The object is above.");
    } 
    else 
    {
        print ("The object is below.");
    }

    if (relativePosition.z > 0) {
        print ("The object is in front.");
    }
    else 
    {
        print ("The object is behind.");
    }
}
person Adam Staszak    schedule 26.03.2017

person    schedule
comment
InverseTransformPoint получает Vector3, а не ContactPoint[]. docs.unity3d.com/ScriptReference/ - person Silvio Guedes; 24.05.2015