Как найти, какая сторона коллайдера была поражена попаданием. - PullRequest
2 голосов
/ 16 сентября 2011

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

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

Ответы [ 3 ]

4 голосов
/ 16 сентября 2011
function OnCollisionEnter(collision : Collision)
{
    var relativePosition = transform.InverseTransformPoint(collision.contacts);

    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.”);
    }
}
0 голосов
/ 26 марта 2017

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

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.");
    }
}
0 голосов
/ 24 мая 2015
void OnCollisionEnter(Collision collision)
{            
    Vector3 dir = (collision.gameObject.transform.position - gameObject.transform.position).normalized;

    if(Mathf.Abs(dir.z) < 0.05f)
    {
        if (dir.x > 0)
        {
            print ("RIGHT");    
        }
        else if (dir.x < 0)
        {
            print ("LEFT");             
        }
    }
    else
    {
        if(dir.z > 0)
        {
            print ("FRONT");
        }
        else if(dir.z < 0)
        {
            print ("BACK");
        }
    }
}
...