【Unity】オブジェクトがカメラに見えているか判定する

投稿者: | 2021-05-05

オブジェクトがカメラに映っているかどうかを判定してみます。

スクリプトを付ける

まず、判定したいオブジェクトにスクリプトをつけて、インスペクタでStaticのチェックを入れます。

スクリプトでは、OnBecameVisibleに見えるようになったときの処理、OnBecameInvisibleに見えなくなったときの処理を書きます。

using UnityEngine;
using UnityEngine.UI;

public class RendererTest : MonoBehaviour
{
    [SerializeField] Text text;

    // Start is called before the first frame update
    void Start()
    {
        text.text = "";
    }

    private void OnBecameVisible()
    {
        text.text = "見えている";
    }

    private void OnBecameInvisible()
    {
        text.text = "見えていない";
    }
    
}

遮るオブジェクト

また、このオブジェクトを遮ったことを判定したい静的オブジェクトのインスペクタでも、Staticのチェックを入れます。

オクルージョンカリング

さらに、Window > Rendering > Occlusion Culling をクリックして、オクルージョンカリングウィンドウを出し、Bakeボタンを押します。

これで、このオブジェクトがカメラに映っているかどうかを判定できました。

シーンビューにこのオブジェクトが映っているときは、常に見えていると判定されるので、シーンビューを閉じるかシーンビューで何もないところを表示しておきます。

Renderer.isVisible

同じことを、Renderer.isVisibleの値でできます。見えているとtrue、見えていないとfalseになります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RendererTest2 : MonoBehaviour
{
    [SerializeField] Renderer targetRenderer;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(targetRenderer.isVisible)
        {
            Debug.Log("見えている");
        }
        else
        {
            Debug.Log("見えていない");

        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。