うにてぃブログ

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

【Unity】一部メソッドで Physics.queriesHitBackfaces が動作しない

https://hacchi-man.hatenablog.com/entry/2023/01/14/220000hacchi-man.hatenablog.com

上記の記事で書いたように、Unity2021、2022では Physics.queriesHitBackfaces = true だとしても一部メソッドを除いて正しい挙動を行わない

そのため、Unity2021、2022で正しい結果を得るためには、Physics.Raycast ではなく Physics.RaycastNonAlloc を利用する必要があります

Physics.RaycastNonAlloc は名前の通り Raycast を行った際に GC を発生させないという特徴があり以下のように利用します

    private RaycastHit[] _hit = new RaycastHit[10];

    private void Update()
    {
        var pos = Vector3.zero;
        var dir = Vector3.up;
        var distance = 1f;
#if UNITY_EDITOR
        Debug.DrawRay(pos, dir * distance, Color.red, 5f);
#endif
        var ray = new Ray(pos, dir);
        Physics.queriesHitBackfaces = true;
        var hit = Physics.RaycastNonAlloc(ray, _hit, distance);
    }

予めprivate RaycastHit[] _hit = new RaycastHit[10]; を確保しておきそれを引数に利用することで、内部でインスタンスを作成しないようにできます

しかしながら、ここで渡す配列のサイズ分だけしか判定が取れないため、配列サイズには注意する必要があります