unity Layer CullingMask



 cullingMask属性:摄像机按层渲染

基本语法:public intcullingMask { get; set; }

功能说明:此属性用于按层(即GameObject.layer)有选择性的渲染场景中的物体。通过cullingMask可以使得当前摄像机有选择性的渲染场景中的部分物体,默认cullingMask=-1即渲染场景中任何层物体,当cullingMask=0时不渲染场景中任何层,若只渲染分别位于2、3、4层的物体则可以使用代码cullingMask=(1<<2)+(1<<3)+ (1<<4)来实现。

实例演示:下面通过实例演示属性cullingMask的使用。

  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class CullingMask_ts : MonoBehaviour  
  5. {  
  6.     void OnGUI()  
  7.     {  
  8.         //默认CullingMask=-1,即渲染任何层  
  9.         if (GUI.Button(new Rect(10.0f, 10.0f, 200.0f, 45.0f), "CullingMask=-1"))  
  10.         {  
  11.             camera.cullingMask = -1;  
  12.         }  
  13.         //不渲染任何层  
  14.         if (GUI.Button(new Rect(10.0f, 60.0f, 200.0f, 45.0f), "CullingMask=0"))  
  15.         {  
  16.             camera.cullingMask = 0;  
  17.         }  
  18.         //仅渲染第0层  
  19.         if (GUI.Button(new Rect(10.0f, 110.0f, 200.0f, 45.0f), "CullingMask=1<<0"))  
  20.         {  
  21.             camera.cullingMask = 1 << 0;  
  22.         }  
  23.         //仅渲染第8层  
  24.         if (GUI.Button(new Rect(10.0f, 160.0f, 200.0f, 45.0f), "CullingMask=1<<8"))  
  25.         {  
  26.             camera.cullingMask = 1 << 8;  
  27.         }  
  28.         //渲染第8层与第0层  
  29.         if (GUI.Button(new Rect(10.0f, 210.0f, 200.0f, 45.0f), "CullingMask=0&&8"))  
  30.         {  
  31.             //注:不可大意写成camera.cullingMask = 1 << 8+1;或  
  32.             //camera.cullingMask = 1+1<<8 ;因为根据运算符优先次序其分别等价于  
  33.             //camera.cullingMask = 1 << (8+1)和camera.cullingMask = (1+1)<<8  
  34.             camera.cullingMask = (1 << 8) + 1;  
  35.         }  
  36.     }  
  37. }  
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层.    

  1. 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层.  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值