Rayを使わない接地判定

接地判定をする方法は色々ありますが、ほとんどが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 AngleMax Normal Angleで範囲を設定できるみたいです。

Use Triggersにチェックを入れればIsTriggerにチェックが入ったコライダーも対象にできますが、なぜか設定したNormal Angleの範囲外でも戻り値がTrueになってました。

ユニティちゃんにはBoxCollider2Dがアタッチされているのですが、足の部分だけTrueになります。
複数のフィルターを使えば上下左右の検知もできそうです。

参考

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

コメント

タイトルとURLをコピーしました