これはばかげた質問に聞こえるかもしれませんが、if ステートメントで、オブジェクトが現在別のオブジェクトと衝突しているかどうかを確認することは可能ですか?
これは私が最初に考えたものです (以下のコード スニピットで) が、私が理解できない奇妙な理由により、オブジェクトがプラットフォームによって上方にプッシュされている場合、変数 onFloor が false になることがあります。
void OnCollisionEnter2D(Collision2D c)
{
switch(c.gameObject.tag)
{
case "Platform":
onFloor = true;
break;
default:
break;
}
}
void OnCollisionExit2D(Collision2D c)
{
switch(c.gameObject.tag)
{
case "Platform":
onFloor = false;
break;
default:
break;
}
}
そのため、コード内でオブジェクトのサークルコライダーが交差するオブジェクトのボックスコライダーと衝突しているかどうかを検出する方法があるかどうかを尋ねています。何かのようなもの
if(CircleCollider2D.CollidingObject != null && CircleCollider2D.CollidingObject.tag == "Platform")
{ /*Code I'd like to do here*/ }
これは、うまくいく方法を考えようとしている私の想像にすぎませんが、要点はわかります。
それで、私は尋ねます、私の想像力に対する解決策はありますか?
プログラマーと話し合った後、IsTouching に下線が引かれ、次のエラーが表示されます: 'Collider2D' には 'IsTouching' の定義が含まれていません。ディレクティブまたはアセンブリ参照?)。
スリム化されたコードは次のとおりです。
using UnityEngine;
public class Ball : MonoBehaviour
{
Vector2 jumpVelocity;
public Collision2D platform;
// Use this for initialization
void Start()
{
jumpVelocity = new Vector2(0, rigidbody2D.gravityScale * 100);
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space) && collider2D.IsTouching(platform))
{
rigidbody2D.AddForce(jumpVelocity, ForceMode2D.Force);
}
}
}
collider2D を Collision2D 変数に変更し、その variable.collider.IsTouching を使用しても同じエラーが発生することに注意してください。