仅在靠近控制器/摄像头时才渲染GameObject

时间:2016-07-02 07:36:38

标签: performance unity3d rendering

我和我的朋友正在尝试在Android上开发游戏,我们正在尽力减少延迟。

是否可以仅在靠近控制器时渲染对象?

我们有这个岛,所以现场有很多树。

我们仍然是Unity的新手。如果有可能,怎么样?感谢。

1 个答案:

答案 0 :(得分:2)

你可以通过两种方式做到这一点。

<强> 1 即可。 Unity内置的细节级别(LOD)是您应该采用的第一个解决方案。为这些GameObject创建多个3D模型。高详细对象,中间细节,低细节和非常真实的行详细多边形。

当你远离那个物体时,Unity只会显示低细节的3D模型。一旦您靠近物体,Unity就会自动将3D模型与高详细的3D模型交换。这改善了游戏的记忆和速度。要了解如何设置Google“细节水平统一”并观看视频或关注Unity tutorial。它需要视觉才能理解

<强> 2 即可。另一种解决方案是使用Vector3.Distance检查相机与要隐藏的GameObject之间的距离,然后通过将Renderer设为Renderer.enabled来禁用false来隐藏它。 / p>

以下是此方法的完整工作代码。只需将下面的代码附加到远离相机时要隐藏的树木或网格的每个。 您可以调整distanceToAppear变量以满足您的需求。

public class MeshMonitor : MonoBehaviour
{
    Transform mainCamTransform; // Stores the FPS camera transform
    private bool visible = true;
    public float distanceToAppear = 8;
    Renderer objRenderer;

    private void Start()
    {
        mainCamTransform = Camera.main.transform;//Get camera transform reference
        objRenderer = gameObject.GetComponent<Renderer>(); //Get render reference
    }
    private void Update()
    {
        disappearChecker();
    }
    private void disappearChecker()
    {
        float distance = Vector3.Distance(mainCamTransform.position, transform.position);

        // We have reached the distance to Enable Object
        if (distance < distanceToAppear)
        {
            if (!visible)
            {
                objRenderer.enabled = true; // Show Object
                visible = true;
                Debug.Log("Visible");
            }
        }
        else if (visible)
        {
            objRenderer.enabled = false; // Hide Object
            visible = false;
            Debug.Log("InVisible");
        }
    }
}