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 ๋ฑ)๋ ํ๋ก์ ํธ์ ๋ฐ๋ผ ํ์์ ๋ง๊ฒ ์ฌ์ฉํ๊ฑฐ๋ ์ปค์คํฐ๋ง์ด์ฆ ๊ฐ๋ฅ