7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-08

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

環境

Unity2017.1.0f3

書き方

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

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

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

OnBecameInvisible()を使った例

LoockChange.cs

using UnityEngine;

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

  private bool flag = false;

  void OnBecameInvisible()  // カメラから見えなくなった時
  {
    if(flag==true)  // 偶数回に見えなくなったときの処理
    {
      
    }
    else  // 最初、奇数回に見えなくなったときの処理
    {
      
    }
    flag = !flag;
  }
}

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

LoockChange.cs

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;
    }
    else
    {
      this.GetComponent<Renderer>().material=mat02;
    }
    fMaterial = !fMaterial;
  }
}

image.png

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

参考

  1. カメラに写っている間のみ処理を行う - テラシュールブログ

  2. 【Unity】オブジェクトがカメラに写っているかと注意点 - ヘチマのノート

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?