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;
}
}
とすると見えなくなる度にオブジェクトの色が変わる。