【问题标题】:Make object disappear when it leaves specific camera viewport in VR使对象在 VR 中离开特定摄像机视口时消失
【发布时间】:2017-10-19 09:40:01
【问题描述】:

我四处寻找不同的解决方案,以使对象在 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 问题?

【问题讨论】:

  • 你设置正确了吗?该脚本在您当前要禁用的游戏对象中?这个游戏对象有碰撞器吗?

标签: c# unity3d camera


【解决方案1】:

您可以使用Renderer.isVisible,或Renderer.OnBecameVisible()Renderer.OnBecameInvisible()

以下示例来自手册页。

虽然启用并不会禁用游戏对象,但如果任何相机都看不到对象,它只会“暂停”更新。如果您使用协程,您需要自己暂停它们。

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

using UnityEngine;

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

【讨论】:

  • 我试过这个方法,但是它把所有的相机都考虑进去了对吧?包括编辑器,我真的想要一种方法,我可以只为一个相机指定这个。
  • 嘿@JonDier 你知道怎么做了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多