カメラに映っているか否か
とあるキャラクターがカメラに映ってるか否か、みたいなのを知る方法の紹介となります。
これが分かると、大量にオブジェクトがある場合に「カメラに映ってるものだけ動作させる」みたいな事が出来て負荷が抑えられるじゃないかなーと思ったりなんだり。
IsRendered.cs
それではさっそくスクリプトは以下の通りです。
OnWillRenderObject()はそのレンダラーがカメラに映ってるときに呼び続けられるので、これを利用しています。またUpdate()の後にOnWillRenderObject()が呼ばれるので、フラグをfalseにするのはUpdate内で行っています。
さらにOnWillRenderObject()自体は全てのカメラが対象になるため、タグを用いて対象のカメラを限定しています。
判定にはレンダラーが必要
上記でもありましたが、レンダラーがカメラに映っている(描画されている?)時にOnWillRenderObject()が呼ばれるので、このスクリプトと同じオブジェクトにレンダラーが必要です。
上記のようにレンダラーがキャラクターの一番親のオブジェクトに付いていない場合や、複数のレンダラーがある場合もあるので、注意が必要です.
おわりに
これを使って、敵の目線にカメラ付けてプレイヤーが見えているか、みたいなメタルギア的な事出来ないかな?とか思いましたが、凄い無駄な実装な気しかしないですね…