Unity中cullingMask属性作用解析

Camera.cullingMask

public int cullingMask;

描述

这用于有选择地渲染场景的一部分。

如果GameObjectlayerMask和摄像机cullingMask为零,那么该摄像机将无法看到游戏对象

1.关于Camera.cullingMask:This is used to render parts of the scene selectively.,

     先码下专业翻译:有选择性的渲染部分场景。

     即通过勾选不同的层,来选择渲染

2.代码中cullingMask为一个Int类型的值,32位,怎么在代码中改变它的值,达到控制相机选择渲染的效果,就是我下面说的

3.开始网上搜索了下,都是粗略的解释,如:开启第一层,cullingMask = 1<<2。

4.解释下:1<<index,1的二进制是00000000 00000001,1<<index就是左移index位,如1<<2,就是00000000 00000100

5.下面开始详细说cullingMask,当相机什么都不渲染时,cullingMask等于0,即32个0,当相机渲染everything时,cullingMask为-1,即32个1

    在某些情况下,我们需要动态的变化我们Camera的cullingMask. 

    所以我们需要用到这些常用的命令. 

    camera.cullingMask = ~(1 << x);  // 渲染除去层x的所有层          

    camera.cullingMask &= ~(1 << x); // 关闭层x       

    camera.cullingMask |= (1 << x);  // 打开层x      

    camera.cullingMask = 1 << x + 1 << y + 1 << z; // 摄像机只显示第x层,y层,z层.

using UnityEngine;
using System.Collections;
 
public class CullingMask_ts : MonoBehaviour
{
    void OnGUI()
    {
        //默认CullingMask=-1,即渲染任何层
        if (GUI.Button(new Rect(10.0f, 10.0f, 200.0f, 45.0f), "CullingMask=-1"))
        {
            camera.cullingMask = -1;
        }
        //不渲染任何层
        if (GUI.Button(new Rect(10.0f, 60.0f, 200.0f, 45.0f), "CullingMask=0"))
        {
            camera.cullingMask = 0;
        }
        //仅渲染第0层
        if (GUI.Button(new Rect(10.0f, 110.0f, 200.0f, 45.0f), "CullingMask=1<<0"))
        {
            camera.cullingMask = 1 << 0;
        }
        //仅渲染第8层
        if (GUI.Button(new Rect(10.0f, 160.0f, 200.0f, 45.0f), "CullingMask=1<<8"))
        {
            camera.cullingMask = 1 << 8;
        }
        //渲染第8层与第0层
        if (GUI.Button(new Rect(10.0f, 210.0f, 200.0f, 45.0f), "CullingMask=0&&8"))
        {
            //注:不可大意写成camera.cullingMask = 1 << 8+1;或
            //camera.cullingMask = 1+1<<8 ;因为根据运算符优先次序其分别等价于
            //camera.cullingMask = 1 << (8+1)和camera.cullingMask = (1+1)<<8
            camera.cullingMask = (1 << 8) + 1;
        }
    }
}

 

猜你喜欢

转载自blog.csdn.net/qq_40348469/article/details/83181067