MRが楽しい

MRやVRについて学習したことを書き残す

Unityでオブジェクトがカメラに映っているかの判定を行う

本日は Unity の小ネタ枠です。
Unityでオブジェクトがカメラに映っているかの判定を行う方法です。

OnBecameVisible

OnBecameVisible 関数はオブジェクトの Renderer が任意のカメラに映ったタイミングで呼び出されます。
OnBecameInvisible 関数はカメラに映らなくなったタイミングで呼び出され、OnWillRenderObject 関数は映っている間常に呼び出されます。
本関数を使う場合、オブジェクトに Renderer コンポーネントが設定されている必要があります。
docs.unity3d.com
docs.unity3d.com
docs.unity3d.com

また、OnWillRenderObject 関数内で Camera.current を参照すると現在オブジェクトをレンダリングしているカメラの情報が取得できます。

サンプルスクリプト

以下のサンプルスクリプトを作成しました。
オブジェクトがカメラに写っているときはマテリアルが赤色に、映っていないときは青色に変化します。
・OnBecameVisibleTest.cs

using UnityEngine;

public class OnBecameVisibleTest : MonoBehaviour
{
    /// <summary>
    /// Rendererが任意のカメラから見えると呼び出される
    /// </summary>
    private void OnBecameVisible()
    {
        this.GetComponent<Renderer>().material.color = Color.red;
    }
    
    /// <summary>
    /// Rendererがカメラから見えなくなると呼び出される
    /// </summary>
    private void OnBecameInvisible()
    {
        this.GetComponent<Renderer>().material.color = Color.blue;
    }
}

カメラに写っているとき


カメラに写っていないとき

因みにメインカメラ以外のカメラでも判定が発生します。
以下の通り、シーンビューで確認した場合でもオブジェクトが映っている判定が走ります。

bluebirdofoz.hatenablog.com