接地判定をする方法は色々ありますが、ほとんどがRayを使って判定するかと思います。今回は、Rayを使わずに接地判定を行うスクリプトを作成します。
ContactFilter2Dを使用していますが、2D限定で3Dには無いようなので注意です。
接地判定
[SerializeField] private ContactFilter2D filter2d; private Rigidbody2D rb; void Start() { rb = GetComponent<Rigidbody2D>(); } void Update() { bool isTouch = rb.IsTouching(filter2d); // 結果を表示 GameManager.Display(isTouch.ToString()); }
[SerializeField] private ContactFilter2D filter2d;
でインスペクターに表示されたフィルターを設定し、それをIsTouching()の引数に渡しています。
Use Normal Angleにチェックを入れて、
Min Normal Angle、Max Normal Angleで範囲を設定できるみたいです。
Use Triggersにチェックを入れればIsTriggerにチェックが入ったコライダーも対象にできますが、なぜか設定したNormal Angleの範囲外でも戻り値がTrueになってました。

参考

【Unity】Raycastを使わず地面に接触しているか判定する - テラシュールブログ
今回は2Dゲームで地面に接触しているかを判定するアプローチについてです。 ピヨちゃん大地に立つ判定 ただし壁や天井は除く 地面の接触判定をする Colliderに接触しているかどうかを取得する GetContactsやIsTouching GetContactsやTouchesで得る値を絞り込むフィルター Rayを飛ば...
コメント