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

1 min読了の目安(約1000字TECH技術記事

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

「ある GameObject を (あるいは 1 点を) カメラが映しているか」という判定方法はよく見かけますが,今回はあくまでも「ある範囲をカメラが映しているか」です.

子要素の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を返す.

参考文献