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;
        }
    }
}

补加关于C#位运算符的相关知识

A = 0011 1100
B = 0000 1101
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值