Unity的Scene场景下的物体丢失问题

在使用Unity的时候经常发现一个问题,在Scene窗口下,如果对物体视角拉的太近,容易出现画面消失或者变形的情况, 这种问题有一个很实用的解决方法,如果想看哪个物体,就在Hierarchy中选中该物体,然后按一下F键,再用鼠标滚轮拉近就可以了,拉近后的物体不会再消失或变形了。

具体操作我们清楚了,这个原理我们可能还不清楚,为什么会这样,是因为Scene场景下的nearClipPlane值的原因,我们可以尝试在Editor界面打印出Scene场景下camera的nearClipPlane,具体方法如下:

在Hierarchy下建立一个空物体,挂载如下脚本。

using UnityEngine;
using UnityEditor;

[ExecuteInEditMode] // 使脚本在编辑器界面下运行
public class Test : MonoBehaviour
{
    
    
    private void OnEnable()
    {
    
    
        SceneView.onSceneGUIDelegate += OnSceneGUI; // 挂载回调函数
    }

    private void OnDisable()
    {
    
    
        SceneView.onSceneGUIDelegate -= OnSceneGUI;
    }

    void OnSceneGUI(SceneView view)
    {
    
    
        Debug.Log(view.camera.nearClipPlane); // 打印出Scene视角下Camera的平截头体的ZNear值
    }
}

然后我们再在Scene视角下移动Camera,当滚动鼠标滚轮,拉远距离时,发现ZNear值在不断增大,反方向转动滚轮,ZNear值会对应减小。

在这里插入图片描述
这意味着,如果我们再加上鼠标右键对场景进行旋转,胡乱转动鼠标,最后的ZNear值可能就会很大了,如下图所示:
在这里插入图片描述
这样我们就很容易在Scene视角下丢失物体,因为ZNear值太大,物体被Camera裁剪掉了。

而如果我们按F键,相机会拉到一个距离,而且会纠正摄像机的ZNear值,这个时候继续放大,能把ZNear放到很小,如下图所示,ZNear随鼠标滚轮变得很小:
在这里插入图片描述
注意,这里的Camera的属性值好像是不能调整的,我尝试在这里直接更改camera的ZNear值,但是并不成功。

另外总结一下几种Scene场景下移动视角与Camera的ZNear的关系:

  • 直接转动滚轮,会增/减 ZNear值
  • 鼠标中键和鼠标右键不会改变ZNear值
  • 如果想拉近摄像头,但是不想改变ZNear值,可以按住鼠标右键不放,再按“WASD”移动相机位置

猜你喜欢

转载自blog.csdn.net/alexhu2010q/article/details/105667307