Unity的Layer

Unity是用 int32来表示32个Layer层,int32用二进制来表示一共有32位。

0000 0000 0000 0000 0000 0000 0000 0000

31                                                                 0

看几个例子

开启layer 2

LayerMask mask = <<;

其中 <<左边的 1表示有[开启],0表示没有该layer[忽略] 。右边的2表示左移2位即是 layer2层的位置。

开启layer 0和layer 2

LayerMask mask =  <<  |   << ;

开启Layer0 并关闭 Layer2

LayerMask mask =  <<  |  << 

开启Layer Default

LaserMask mask= << LayserMask.NameToLayer(“Default”);

脚本例子

下面是一个脚本例子,把它绑定在Camera上

using UnityEngine;
using System.Collections; [RequireComponent(typeof(Camera))]
public class LayerMaskTest : MonoBehaviour { //打开Npc层,变1 或 运算符
private void Show()
{
//camera.cullingMask |= 1 << LayerMask.NameToLayer("Npc");
camera.cullingMask = (int) 1<<LayerMask.NameToLayer("Npc");//写法二
} // 关闭Npc层,变0 按位与 & 按位取反 ~
private void Hide()
{
camera.cullingMask &= ~(1 << LayerMask.NameToLayer("Npc"));
} // 开关Npc层,按位异或 ^
private void Toggle()
{
camera.cullingMask ^= 1 << LayerMask.NameToLayer("Npc");
} void OnGUI()
{
if (GUILayout.Button("Show")) Show();
if (GUILayout.Button("Hide")) Hide();
if (GUILayout.Button("Toggle")) Toggle();
}
}

实际应用

Unity的碰撞检测

static bool Raycast(Vector3 origin, Vector3 direction, float distance = Mathf.Infinity, int layerMask = DefaultRaycastLayers);

物理碰撞互斥

我们项目中自己写的物理碰撞互斥

//开启Npc层的碰撞
LayerMask mask = << (int)GameLayerDef.Npc;
float bounds = ;
RaycastHit2D raycastHit = Physics2D.CircleCast(transform.position, bounds, Vector2.right, Mathf.Infinity, mask.value);


资料文献

部分内容参考自: 【风宇冲】二进制:四 Unity

Unity LayerMask 的位运算的更多相关文章

  1. 【转】Unity LayerMask 的位运算

    Unity的Layer Unity是用 int32来表示32个Layer层,int32用二进制来表示一共有32位. 0000 0000 0000 0000 0000 0000 0000 0000 31 ...

  2. Unity - LayerMask简析

    本文简述了LayerMask的定义,后通过项目实战充分解析 LayerMask中的GetMask.LayerToName.NameToLayer 等函数的使用方法及其注意事项. 项目地址:3D坦克大战 ...

  3. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  4. 简简单单学会C#位运算

    一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

  5. SQL Server时间粒度系列----第8节位运算以及设置日历数据表节假日标志详解

    本文目录列表: 1.位运算 2.设置日历数据表节假日标志 3.总结语 4.参考清单列表   位运算   SQL Server支持的按位运算符有三个,分别为:按位与(&).按位或(|).按位异或 ...

  6. js中的位运算

    按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...

  7. Java中的位运算

    昨天去面试的时候做到了一道Java的位运算题目,发现有个运算符不懂:">>>",今天特地查了一下,并小结一下常见的位运算符号: ~  按位非(NOT)(一元运算) ...

  8. C#位运算讲解与示例

    首先每一个权限数都是2的N次方数 如:k1=2 ; //添加 k2=4 ; //删除 k3=8; //修改 ... 如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了. 如: p ...

  9. C#枚举中的位运算权限分配浅谈

    常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 & 0 = 0, 1 | 0 = 1, ~1 = 0 在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第 ...

随机推荐

  1. 课程三(Structuring Machine Learning Projects),第一周(ML strategy(1)) —— 0.Learning Goals

    Learning Goals Understand why Machine Learning strategy is important Apply satisficing and optimizin ...

  2. 我是如何利用Github Pages搭建起我的博客,细数一路的坑

    1.前言 其实早在这之前我就一直想过写博客,但由于种种原因一直没有去学习这方面的知识,最近半个月(从开始动手到搭建好)一直陆陆续续的在着手这方面的工作.从开始到搭建完成的过程中遇到了很多困难,因为在这 ...

  3. Android 系统服务

    模拟器版本 Android 4.1.2 - API Level 16 CMD 下输入:adb shell service list   服务名 对象 0 phone com.android.inter ...

  4. Java:类的构造函数

    类的构造函数   类的构造函数特点: 1. 构造函数也称为构造方法,构造函数名和类名相同.     2. 构造函数不能有返回值,也不能用void声明. 3. 构造函数可以有参数,也可以无参数,在一个类 ...

  5. "java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation."问题解决

    问题描述 运行uiautomator,报错"java.lang.IllegalStateException: No instrumentation registered! Must run ...

  6. [深度学习] 最全优化方法总结比较--SGD,Adagrad,Adadelta,Adam,Adamax,Nadam

    SGD 此处的SGD指mini-batch gradient descent,关于batch gradient descent, stochastic gradient descent, 以及 min ...

  7. Python vtk学习(1)

    Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学.图像处理和可视化.Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有 ...

  8. ASP.NET MVC5 + EF6 + LayUI实战教程,通用后台管理系统框架(3)

    前言 本节将我们自己的CSS样式替换系统自带的 开始搭建 将脚本文件夹删掉,将内容文件夹里的内容删掉,将我们自己的CSS样式文件,全部复制到内容里边 新建家庭控制器 给家庭控制器添加索引视图 指数代码 ...

  9. Spark SQL结构化数据处理

    Spark SQL是Spark框架的重要组成部分, 主要用于结构化数据处理和对Spark数据执行类SQL的查询. DataFrame是一个分布式的,按照命名列的形式组织的数据集合. 一张SQL数据表可 ...

  10. Flask在Pycharm开启调试模式

       一.Flask在Pycharm2018前的版本只需设置(两种方法之一): 1. 直接设置app的debug为true: app.debug=true 2. 把debug=true作为参数,传入到 ...