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];
を確保しておきそれを引数に利用することで、内部でインスタンスを作成しないようにできます
しかしながら、ここで渡す配列のサイズ分だけしか判定が取れないため、配列サイズには注意する必要があります