cullingMask属性:摄像机按层渲染
基本语法:public intcullingMask { get; set; }
功能说明:此属性用于按层(即GameObject.layer)有选择性的渲染场景中的物体。通过cullingMask可以使得当前摄像机有选择性的渲染场景中的部分物体,默认cullingMask=-1即渲染场景中任何层物体,当cullingMask=0时不渲染场景中任何层,若只渲染分别位于2、3、4层的物体则可以使用代码cullingMask=(1<<2)+(1<<3)+ (1<<4)来实现。
实例演示:下面通过实例演示属性cullingMask的使用。
- 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;
- }
- }
- }
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;
}
}
}
在这段代码中,在OnGUI方法中定义了5个不同的Button来渲染不同层的物体。当然,在使用cullingMask来有选择性渲染物体之前,需要先对场景中的物体的层次进行设置。另外需要注意在渲染多个层时的代码写法,如代码中所示,在渲染第8层和第0层时,且勿将代码写成camera.cullingMask = 1 << 8+1或camera.cullingMask = 1+1<<8的形式。具体的渲染情况请读者自行运行程序查看。
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层.
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层.