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”移动相机位置
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值