Unity3D 层剔除距离与层球形剔除 layerCullSpherical 和 layerCullDistances

    Camera. layerCullDistances 层剔除距离,可以分别设置不同Layer的物体的剔除距离,比如可以将小物件比如地上的石头灌木的剔除距离设置的近一些,而大的物体如房子子树木等设置的远一些,这样可以节省算力,这个属性是一个float类型的数组,如果要设置这个值,你需要创建一个float[32] 也就是含有32个元素的数组,因为Unity3D最高支持32个Layer,然后按照Layer的编号设置对应索引的元素为本Layer的指定剔除距离。代码如下:

public class clipdistance : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        float[] _distance = new float[32];
        _distance[11]=8; //设置第11层的剔除距离为8
        GetComponent<Camera>().layerCullDistances = _distance;

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

可以看到下面的结果:

相机距离为(0,0,-8)而方块为 (2,0,0) 因为方块的包裹盒的大小为1 ,这个时候正好与箱子中心的垂直距离为8.5在被剔除的边缘。

相机距离为(0,0,-8)而方块为 (2,0,0) 因为方块的包裹盒的大小为1 ,这个时候正好与箱子中心的垂直距离超过了8.5已经被剔除了。

这里又引出下一个问题,因为计算剔除是采用的物体与相机正前方平面的垂直距离,会导致相机左右摆动的时候,出现物体时有时无的情况,因为垂直距离会发生变化,

由于相机的旋转,物体的中心与相机平面的垂直距离正好大于8.5,被剔除了,这样导致处在这种位置的物体,时有时无。为了避免这种情况,可以设置 Gamera. layerCullSpherical =true 这样采用球形剔除,就不会出现摄像机摆动导致的物体时有时无的情况。

引擎会缩短实际发生剔除的距离,保证物体显示的时候不会出现相机摇摆时有时无的情况出现。

猜你喜欢

转载自blog.csdn.net/u012149999/article/details/103520015