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

  • 相关阅读:
    [JSOI2007][BZOJ1031] 字符加密Cipher|后缀数组
    leetcode Flatten Binary Tree to Linked List
    leetcode Pascal's Triangle
    leetcode Triangle
    leetcode Valid Palindrome
    leetcode Word Ladder
    leetcode Longest Consecutive Sequence
    leetcode Sum Root to Leaf Numbers
    leetcode Clone Graph
    leetcode Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/mimime/p/6145744.html
Copyright © 2011-2022 走看看