【Unity】カメラから見えなくなったときの判定方法

VRやってるときに見えなくなっているときの判定が気になった。
なので、調べたら意外と簡単だったので書いてみた。

環境

Unity2017.1.0f3

書き方

レンダラー(カメラ)から
OnBecameVisible()見えた瞬間
OnBecameInvisible()見えなくなった瞬間
OnWillRenderObject()見えている時(Camera.current.nameでカメラのオブジェクト名を取得できる)
で判定することができる。

いずれもSceneViewでも判定されてしまうため、SceneViewで確認したければ
OnWillRenderObject()を使ってCamera.current.nameから"SceneCamera"を判定外にする必要があるようだ。1

判定側にはRendererがアタッチされていないと判定されないみたいだ。2

OnBecameInvisible()を使った例

using UnityEngine;

public class LookChange : MonoBehaviour {  //MonoBehaviourは呼ばれていないといけない

  private bool flag = false;

  void OnBecameInvisible()  // カメラから見えなくなった時
  {
    if(flag==true)  // 偶数回に見えなくなったときの処理
    {

    }
    else  // 最初、奇数回に見えなくなったときの処理
    {

    }
  }
}

例えばカメラから見えなくなる度に色を変える場合は

using UnityEngine;

public class LookChange : MonoBehaviour {

  private bool fMaterial = false;
  [SerializeField]
  private Material mat01;
  [SerializeField]
  private Material mat02;

  void OnBecameInvisible()
  {
    if(fMaterial==true)
    {
      this.GetComponent<Renderer>().material=mat01;
      fMaterial=false;
    }
    else
    {
      this.GetComponent<Renderer>().material=mat02;
      fMaterial=true;
    }
  }
}

image.png

とすると見えなくなる度にオブジェクトの色が変わる。

参考

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.