使对象在VR中离开特定的摄像机视口时消失

时间:2017-10-19 09:40:01

标签: c# unity3d camera

我在周围寻找不同的解决方案,使对象在VR中离开特定的摄像机视口时消失。

我最终使用GeometryUtility来使用以下解决方案:

        //Create camera planes
        Plane[] planes = GeometryUtility.CalculateFrustumPlanes(Camera.main);
        //Check if object renderer is in camera view
        if (!GeometryUtility.TestPlanesAABB(planes, GetComponent<Renderer>().bounds))
        {
            //Condition waiting for 2nd object to spawn (To avoid object 1 doesn't disappear instantly)
            if (objectCondition.activeSelf)
            {
                //Deactivate object
                gameObject.SetActive(false);
            }
        }

然而,这会导致对象在离开视口之前消失(大约一半,而不是一直)。我是否实施了这个错误,还是仅仅是VR问题?

1 个答案:

答案 0 :(得分:0)

您可以使用Renderer.isVisibleRenderer.OnBecameVisible()Renderer.OnBecameInvisible()

以下示例来自手册页。

启用不会禁用GameObject,它只是&#34;暂停&#34;如果任何相机未看到该对象,则更新。如果你使用Coroutines,你需要自己暂停。

显然,由于此方法使用渲染器,因此您无法禁用GameObject。我的意思是你可以,但它不会被OnBecameVisible重新启用。但是相机之外的物体无论如何都不会被渲染/剔除。

using UnityEngine;

public class ExampleClass : MonoBehaviour {
    void OnBecameInvisible() {
        enabled = false;
    }
    void OnBecameVisible() {
        enabled = true;
    }
}