💭

Unityで視錐台を使って画面内外判定

2020/10/11に公開

ある範囲をカメラが映しているかという判定を行ったので備忘録として残しておきます.

子要素のGameObjectが画面内に表示されているかを知りたかったのですが,子要素が多すぎたため,全てを判定していくより親要素の空のGameObjectで判定をした方が処理が重くならないなあと思ったのでトライ.
親要素は空のGameObjectなので描画されませんが,判定したい範囲は決まっていたのでカメラの視錐台を使う方法でできました.

コード

// 視錐台の平面を取得
Plane[] planes = GeometryUtility.CalculateFrustumPlanes(camera);

// 視錐台の内側にあるか
bool isRendered = GeometryUtility.TestPlanesAABB(planes, bounds);
  • GeometryUtility.CalculateFrustumPlanesで取得できる平面は,視錐台の

    [0] = Left, [1] = Right, [2] = Down, [3] = Up, [4] = Near, [5] = Far

  • GeometryUtility.TestPlanesAABBboundsplanesの内側にある場合か,何れかのplanesと交差する場合にtrueを返す.

参考文献

Discussion