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になります。
複数のフィルターを使えば上下左右の検知もできそうです。

参考

http://tsubakit1.hateblo.jp/entry/2018/04/07/234028

シェアする

  • このエントリーをはてなブックマークに追加

フォローする