Unity3dでは、衝突者がhit.normalを使用して衝突するサーフェスの法線を得ることができますが、提供されているものがUnity3dにヒットしたのを見つける方法はありますか?hit.normalから衝突したコライダーのどちら側を見つけるか?
解決策の1つは、法線の向きを見ることです。静的なオブジェクトではうまくいくはずですが、向きが変わる動的で動くオブジェクトはどうでしょうか?
Unity3dでは、衝突者がhit.normalを使用して衝突するサーフェスの法線を得ることができますが、提供されているものがUnity3dにヒットしたのを見つける方法はありますか?hit.normalから衝突したコライダーのどちら側を見つけるか?
解決策の1つは、法線の向きを見ることです。静的なオブジェクトではうまくいくはずですが、向きが変わる動的で動くオブジェクトはどうでしょうか?
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.”);
}
}
InverseTransformPointはContactPoint []ではなく、Vector3を受信します。 http://docs.unity3d.com/ScriptReference/Transform.InverseTransformPoint.html –
colisión.contactos[0] .point – Warer
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");
}
}
}
これは動作します:
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.");
}
}
http://gamedev.stackexchange.comを試してみてください - それ - ゲーム開発 –
のコミュニティやhttp://answers.unity3d.comを試してみてください作品 – ina