Unity LayerMask 的位运算

Unity的Layer

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

0000 0000 0000 0000 0000 0000 0000 0000

31                                                                 0

看几个例子

开启layer 2

LayerMask mask = 1<<2;

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

 

开启layer 0和layer 2

1 << 0 | 2;

 

开启Layer0 并关闭 Layer2

0 | 0 << 2

 

开启Layer Default

LaserMask mask=1 << 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,1)">int layerMask = DefaultRaycastLayers);

物理碰撞互斥

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

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

资料文献

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要介绍了Unity游戏开发中外观模式是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家...
这篇文章主要介绍Unity中地面检测方案的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.普通射线在角色坐标(一般是脚底)...
这篇文章主要介绍了Unity游戏开发中如何消除不想要的黄色警告,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带...
这篇文章主要介绍了Unity中有多少种渲染队列,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解
这篇文章主要介绍Unity中如何实现Texture,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!了解Texture2D 如上图,Texture2D是一张
小编给大家分享一下Unity中DOTS要实现的特点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让...
这篇文章给大家分享的是有关unity中如何实现UGUI遮罩流光特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。下面是核心shader:Sh...
这篇文章主要为大家展示了“Unity中如何实现3D坐标转换UGUI坐标”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下...
这篇文章主要介绍了Unity游戏开发中设计模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家...
这篇文章主要介绍了Unity中如何实现仿真丝袜渲染,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了...
这篇文章给大家分享的是有关Unity插件OVRLipSync有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。项目需要接入对话口型动...
这篇文章主要介绍了Unity性能优化之DrawCall的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家...
这篇文章给大家分享的是有关Unity给力插件之Final IK怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这插件有什么用:一般游...
这篇文章给大家分享的是有关Unity中如何内嵌网页插件UniWebView的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、常见Unity中内...
小编给大家分享一下Unity如何做流体物理的几个轮子,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让...
小编给大家分享一下Unity中Lod和Occlusion Culling的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收...
这篇文章将为大家详细讲解有关Unity中LineRenderer与TrailRenderer有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获...
这篇文章主要介绍了Unity中coroutine问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起...
这篇文章将为大家详细讲解有关unity中spine怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。骨骼动画首先我们来看到...
这篇文章主要为大家展示了“Unity Shader后处理中如何实现简单均值模糊”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学...