Layer, LayerMask - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki

Layer์™€ LayerMask ๊ฐœ๋…

Layer

  • Unity์—์„œ Layer๋Š” ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
    • ์˜ˆ๋ฅผ ๋“ค์–ด, "Player", "Enemy", "Ground" ๋“ฑ์˜ ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“ค์–ด ํŠน์ • ๊ทธ๋ฃน์— ์†ํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌ
  • ๊ฐ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋Š” ํ•˜๋‚˜์˜ ๋ ˆ์ด์–ด์— ํ• ๋‹น๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Inspector ์ฐฝ์—์„œ ์„ค์ •

LayerMask

  • LayerMask๋Š” ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋ฅผ ๋น„ํŠธ๋งˆ์Šคํฌ๋กœ ํ‘œํ˜„
    • ํŠน์ • ๋ ˆ์ด์–ด๋“ค์˜ ์กฐํ•ฉ
    • ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋ฅผ ๋™์‹œ์— ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›
    • ๋น„ํŠธ๋งˆ์ŠคํŠธ(bitmask) ๋น„ํŠธ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํŠน์ • ๋น„ํŠธ ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’
  • LayerMask๋Š” ์ฃผ๋กœ ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ(์˜ˆ: Raycasting, ์ถฉ๋Œ ๊ฐ์ง€)์—์„œ ํŠน์ • ๋ ˆ์ด์–ด๋งŒ ๊ณ ๋ คํ•˜๊ฑฐ๋‚˜ ๋ฌด์‹œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

LayerMask ์‚ฌ์šฉ ์˜ˆ์‹œ

1. ํŠน์ • ๋ ˆ์ด์–ด์˜ ์˜ค๋ธŒ์ ํŠธ๋งŒ ๊ฐ์ง€ํ•˜๊ธฐ (Raycast)

void Update() {
    int layerMask = LayerMask.GetMask("Enemy");

    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 100f, layerMask)) {
        Debug.Log("Hit an enemy!");
    }
}

์œ„ ์˜ˆ์ œ์—์„œ LayerMask.GetMask("Enemy")๋Š” "Enemy" ๋ ˆ์ด์–ด์— ํ•ด๋‹นํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋งŒ Raycast์˜ ํƒ€๊ฒŸ์œผ๋กœ ๊ณ ๋ ค

2. ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ ˆ์ด์–ด๋งˆ์Šคํฌ ์ƒ์„ฑ

void Update() {
    int layerMask = LayerMask.GetMask("Enemy", "Ground");

    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 100f, layerMask)) {
        Debug.Log("Hit an enemy or the ground!");
    }
}

์ด ์˜ˆ์ œ๋Š” "Enemy"์™€ "Ground" ๋ ˆ์ด์–ด์— ์†ํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ Raycast ํƒ€๊ฒŸ์œผ๋กœ ์„ค์ •

3. LayerMask ํ•„ํ„ฐ๋ง (๋น„ํŠธ ์—ฐ์‚ฐ)

void Start() {
    int enemyLayer = LayerMask.NameToLayer("Enemy");
    int groundLayer = LayerMask.NameToLayer("Ground");

    int layerMask = (1 << enemyLayer) | (1 << groundLayer);

    Debug.Log("LayerMask: " + layerMask);
}

์œ„ ์ฝ”๋“œ๋Š” LayerMask.NameToLayer๋ฅผ ์‚ฌ์šฉํ•ด ๋ ˆ์ด์–ด ์ธ๋ฑ์Šค๋ฅผ ์–ป์€ ํ›„, ๋น„ํŠธ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋ฅผ ํฌํ•จํ•˜๋Š” LayerMask ์ƒ์„ฑ

Inspector์—์„œ Layer ์„ค์ •

Layer ์ถ”๊ฐ€

  • Unity Editor ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ Edit > Project Settings > Tags and Layers ์„ ํƒ
  • Layers ์„น์…˜์—์„œ ๋นˆ ์Šฌ๋กฏ์— ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด ์ด๋ฆ„ ์ž…๋ ฅ

๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์— ๋ ˆ์ด์–ด ํ• ๋‹น

  • ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์„ ํƒํ•œ ํ›„, Inspector ์ฐฝ ์ƒ๋‹จ์˜ Layer ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ์— ๋ ˆ์ด์–ด ํ• ๋‹น

์ฃผ์˜์‚ฌํ•ญ

  • Unity ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ตœ๋Œ€ 32๊ฐœ์˜ ๋ ˆ์ด์–ด(0~31) ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ ˆ์ด์–ด(์˜ˆ: Default, TransparentFX, Ignore Raycast ๋“ฑ)๋Š” ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ํ•„์š”์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ ๊ฐ€๋Šฅ