Camera.cullingMask
public int cullingMask;
描述
这用于有选择地渲染场景的一部分。
如果GameObject的layerMask
和摄像机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;
}
}
}