using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestLayerMask : MonoBehaviour
{
// Start is called before the first frame update
// 인스턴스가 활성화된 경우에만 호출
void Start()
{
//32비트 레이어 마스크 지원
int floorLayer = LayerMask.NameToLayer("Floor");
string floorLayerName = LayerMask.LayerToName(floorLayer);
int floorLayerMask1 = LayerMask.GetMask(floorLayerName);
int floorLayerMask2 = 1 << floorLayer;
string strBinaryFloorLayer = Convert.ToString(floorLayerMask1, 2);
//floorLayer: 8, floorLayerName: Floor, floorLayerMask1: 256, floorLayerMask2: 256
Debug.LogFormat("floorLayer: {0}, floorLayerName: {1}, floorLayerMask1: {2}, floorLayerMask2: {3}", floorLayer, floorLayerName, floorLayerMask1, floorLayerMask2);
//100000000
//0000 0000 0000 0000 0000 0001 0000 0000
Debug.LogFormat("binaryFloorLayer: {0}", strBinaryFloorLayer);
int shootableLayer = LayerMask.NameToLayer("Shootable");
string shootableLayerName = LayerMask.LayerToName(shootableLayer);
int shootableLayerMask1 = LayerMask.GetMask(shootableLayerName);
int shootableLayerMask2 = 1 << shootableLayer;
string strBinaryShootableLayer = Convert.ToString(shootableLayerMask2, 2);
//shootableLayer: 9, shootableLayerName: Shootable, shootableLayerMask1: 512, shootableLayerMask2: 512
Debug.LogFormat("shootableLayer: {0}, shootableLayerName: {1}, shootableLayerMask1: {2}, shootableLayerMask2: {3}", shootableLayer, shootableLayerName, shootableLayerMask1, shootableLayerMask2);
//100000000
//0000 0000 0000 0000 0000 0010 0000 0000
Debug.LogFormat("strBinaryShootableLayer: {0}", strBinaryShootableLayer);
//Or
//768
//1100000000
//0000 0000 0000 0000 0000 0011 0000 0000
var orLayerMask = floorLayerMask1 | shootableLayerMask1;
Debug.LogFormat("orLayerMask: {0}", orLayerMask);
string strBinaryOrLayer = Convert.ToString(orLayerMask, 2);
Debug.LogFormat("strBinaryOrLayer: {0}", strBinaryOrLayer);
//Not
var notLayerMask = ~orLayerMask;
//strBinaryNotLayer: -769
Debug.LogFormat("notLayerMask: {0}", notLayerMask);
string strBinaryNotLayer = Convert.ToString(notLayerMask, 2);
//strBinaryNotLayer: 11111111111111111111110011111111
Debug.LogFormat("strBinaryNotLayer: {0}", strBinaryNotLayer);
var allLayer = -1;
string allBinaryLayer = Convert.ToString(allLayer, 2);
//allBinaryLayer: 11111111111111111111111111111111
Debug.LogFormat("allBinaryLayer: {0}", allBinaryLayer);
//And
var andLayerMask = floorLayerMask1 & allLayer;
//andLayerMask: 256
Debug.LogFormat("andLayerMask: {0}", andLayerMask);
string strBinaryAndLayer = Convert.ToString(andLayerMask, 2);
//strBinaryAndLayer: 100000000
//strBinaryAndLayer: 0000 0000 0000 0000 0000 0001 0000 0000
/*
*
* 1111 1111 1111 1111 1111 1111 1111 1111
0000 0000 0000 0000 0000 0001 0000 0000
---------------------------------------
0000 0000 0000 0000 0000 0001 0000 0000
*/
Debug.LogFormat("strBinaryAndLayer: {0}", strBinaryAndLayer);
}
}