LayerMask
LayerMask.GetMask("Enemy", "Obstacle")
// Enemy 가 8번 레이어(Layer)라면?
// 1 << 8 (값 256)
LayerMask.NameToLayer("Enemy");
// int 반환값 = 8
LayerMask.LayerToName(8);
int bitMask = enemyLayer.value | obstacleLayer.value; (OR 연산)
layerMask = 7;
// 이진수 111 -> 0,1,2
layerMask = 7;
0000 0000 0000 0000 0000 0000 0000 0000 0111
layerMask = 1 << 7;
0000 0000 0000 0000 0000 0000 0000 1000 0000
public static class Extensions
{
public static bool Contains(this LayerMask mask, int Layer)
{
return (mask.value & (1 << layer)) != 0;
}
public static bool Contains(this LayerMask mask, Gameobject obj)
{
return (mask.value & (1 << obj.layer)) != 0;
}
}
if (mask.Contains(obj, layer)) {}
시나리오 A. Monster/NPC를 때렸을 때, 공격 가능 여부 체크
(this LayerMask mask, GameObject obj)
if(mask.Contains(Enemy 마스크, 몬스터/NPC obj)) {//공격하기}
Enemy는 8번 레이어
mask 0000 0000 0000 0000 0000 0000 0001 0000 0000
1<< NPC 0000 0000 0000 0000 0000 0000 0000 1000 0000 &
0000 0000 0000 0000 0000 0000 0000 0000 0000 false (공격 무시)
~ (NOT) 연산자
~(1 << PlayerLayer)
// UI 레이어까지 포함
if(target == "" || target == "" || target == "" || .....)
if(mask.Contains(target, layer)) {}
Render Texture
[Sub Camera] (촬영)
↓ Target Texture 설정
[Render Texture] (저장소/필름)
↓ 에셋 참조
[Material / UI -> RawImage] (출력/액자)
UI 이해 최적화
2-1. Canvas Render Mode