💭
Unityで視錐台を使って画面内外判定
ある範囲をカメラが映しているかという判定を行ったので備忘録として残しておきます.
子要素の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.TestPlanesAABB
はbounds
がplanes
の内側にある場合か,何れかのplanes
と交差する場合にtrue
を返す.
Discussion