检查对象是否在屏幕外

时间:2019-02-03 18:02:27

标签: unity3d

我需要知道相机何时停止停止将其返回到池中。 我尝试了几件事,但没有成功,我想说明一下相机仅在X轴上跟随玩家,它是3D的,但它是侧滑视图游戏。 顺便说一句,我不使用MonoBehaviour,所以请避免建议OnBecameInvisible和亲戚。

这是我两次失败的尝试。

internal static bool IsVisible(this Renderer renderer)
{
    Plane[] planes = GeometryUtility.CalculateFrustumPlanes(Camera.main);
    return GeometryUtility.TestPlanesAABB(planes, renderer.bounds);
}

internal static void IsVisible(this GameObject go)
{
    var screenPoint = Camera.main.WorldToScreenPoint(go.transform.position);
    screenPoint.x = Mathf.Clamp01(screenPoint.x);

    if (screenPoint.x > .05f)
    {
        Debug.Log("Visible");
    }
    else Debug.Log("Invisible");
}

2 个答案:

答案 0 :(得分:0)

简单:

if(!GetComponent<Renderer>().isVisible){
//Whatever you want to do here
}

如果遇到问题,请参阅:

https://docs.unity3d.com/ScriptReference/Renderer-isVisible.html

https://forum.unity.com/threads/how-do-i-use-renderer-isvisible.377388/

答案 1 :(得分:0)

如果您需要知道对象何时移入和移出屏幕,最简单的解决方案是 MonoBehaviour.OnBecameVisible()与.OnBecameInvisible()配对

编辑:好的,我刚刚读到您没有使用MonoBehaviours-请问为什么? Monohevaiour只为您实际实现的方法付出了代价,仅从MonoBehaviour继承而来并没有那么多开销