Categories: Unity

【Unity】オブジェクトが見えているかどうかを判別する方法

この記事では、特定のオブジェクトがカメラに写っているかどうかを判別する方法を解説します。

使用した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

RendererisVisible は、可視状態では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("見えていない");
        }
    }
}
ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago