この記事では、特定のオブジェクトがカメラに写っているかどうかを判別する方法を解説します。
使用したUnityのバージョン
- Unity 2021.3.23f1
スポンサーリンク
OnBecameVisible() と OnBecameInvisible()
OnBecameVisible()
と OnBecameInvisible()
は MonoBehaviour
のコールバックの一種で以下のような特徴があります。
- 可視状態、または不可視状態になった際に呼び出される
- エディタ上のシーンに表示されていても見える扱いとなる
- Renderer が必要
- OnBecameInvisible() は見えていた状態から見えなくなった場合のみ処理される
例えば、以下のようなコードを Renderer が付いているオブジェクトにアタッチするだけで簡単に見えているか判別することができます。
using UnityEngine;
public class Visible : MonoBehaviour
{
public bool IsVisivle { get; private set; }
private void OnBecameVisible()
{
IsVisivle = true;
}
private void OnBecameInvisible()
{
IsVisivle = false;
}
}
また、オブジェクトが見えてない時(カメラに写ってない時)に enable = false
とすることで計算量を減らして軽くすることができる。
RendererのisVisible
Renderer
の isVisible
は、可視状態ではtrue
、不可視状態ではfalse
を返します。
- エディタ上のシーンに表示されていても見える扱いとなる
- Renderer が必要
見えているときにupdate
などで連続で処理をさせたりできます。
using UnityEngine;
public class Square : MonoBehaviour
{
private SpriteRenderer _spriteRenderer;
void Start()
{
_spriteRenderer = GetComponent<SpriteRenderer>();
}
void Update()
{
if(_spriteRenderer.isVisible)
{
Debug.Log("見えている");
}
else
{
Debug.Log("見えていない");
}
}
}