2011-09-16 13 views
2

Unity3dでは、衝突者がhit.normalを使用して衝突するサーフェスの法線を得ることができますが、提供されているものがUnity3dにヒットしたのを見つける方法はありますか?hit.normalから衝突したコライダーのどちら側を見つけるか?

解決策の1つは、法線の向きを見ることです。静的なオブジェクトではうまくいくはずですが、向きが変わる動的で動くオブジェクトはどうでしょうか?

+0

http://gamedev.stackexchange.comを試してみてください - それ - ゲーム開発 –

+0

のコミュニティやhttp://answers.unity3d.comを試してみてください作品 – ina

答えて

4
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.”); 
    } 
} 
+2

InverseTransformPointはContactPoint []ではなく、Vector3を受信します。 http://docs.unity3d.com/ScriptReference/Transform.InverseTransformPoint.html –

+0

colisión.contactos[0] .point – Warer

0
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"); 
     } 
    } 
} 
0

これは動作します:

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."); 
    } 
} 
関連する問題