我和我的朋友正在尝试在Android上开发游戏,我们正在尽力减少延迟。
是否可以仅在靠近控制器时渲染对象?
我们有这个岛,所以现场有很多树。
我们仍然是Unity的新手。如果有可能,怎么样?感谢。
答案 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");
}
}
}