zoukankan      html  css  js  c++  java
  • 【转】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

    LayerMask mask = 1 << 0 |  1 << 2;

    开启Layer0 并关闭 Layer2

    LayerMask mask = 1 << 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, 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

  • 相关阅读:
    List、Map、set的加载因子,默认初始容量和扩容增量
    spring事务处理
    根据url的属性名来取属性值赋值给js
    XStream JavaBean对象转换成XML!
    【转载:java】详解java中的注解(Annotation)
    Myeclipse修改jdk版本流程
    Bootstrap中文参考手册
    CSS3参考手册
    HTML 5 参考手册
    win7win8一键取得超级管理员权限
  • 原文地址:https://www.cnblogs.com/mimime/p/6145744.html
Copyright © 2011-2022 走看看