うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Raycast 時に MeshCollider の裏側でもヒットするようにする

Physics.queriesHitBackfaces を利用すれば Mesh の裏側から Ray を飛ばしてもヒットするとあったので試してみました

検証

処理はこちら、Physics.Raycast の前に Physics.queriesHitBackfaces = true をすることで裏面もヒットするようにしています

    private void RayTest()
    {
        var pos = Vector3.zero;
        var dir = Vector3.up;
        var distance = 1f;
        var ray = new Ray(pos, dir);
        Physics.queriesHitBackfaces = true;
        var hit = Physics.Raycast(ray, distance);
        Debug.Log(hit);
    }

しかしながら、ログは false になります

Debug で Ray を表示してみても正しく中心から上部に出てるように思えます

原因調査

Unity の Issue Tracker を探していたところ、以下のやつが見つかりました

Physics: Fixed some of the Physics.Raycast overloads ignoring the Physics.queriesHitBackfaces setting. (UUM-9353) First seen in 2023.1.0a4.

いくつかの Physics.Raycast が設定を無視しているようです、また修正は 2023.1.0a4 以降とあるので 2023.1.0a24 で試してみます

Unity 2023.1.0a24

同じスクリプトで試したところ、無事 true になりました

2020.3.37f1 でも動作してなかったみたいなので、結構昔から発生していたバグかもしれません