Unity Raycast ์ฌ์ฉ๋ฒ
๐ก ๊ณต๋ถํ ๋ด์ฉ ์ ๊ธฐ
Raycast ๋
์ง์ ์ ์ฌ์ ํฌ์ํ์ฌ ์ ์คํ ๋์์ ์ฐพ๋ ํจ์์ด๋ค. ํด๋ฆญ/ํฐ์น๋ ๋ฌผ์ฒด๋ฅผ ํ๋จํ๋ ๊ณณ์ ์ฃผ๋ก ์ด๋ค.ย
1. ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
๋ง์ฐ์ค ํฐ์น์ ์ ํํ ์์น๋ก ๊ฐ๋ ๋ก์ง
- ์ ๋ ฅ๋ฐ์ ๋ง์ฐ์ค ์์น๋ฅผ main ์นด๋ฉ๋ผ์ ScreenPointToRayํจ์๋ก ๋ณํ
- Physics.Raycastํจ์๋ก ์ถฉ๋ํ๋ ๋ฌผ์ฒด๋ฅผ ์ฐพ์ hit ๋ณ์์ ๋ฃ์
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
if (Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit))
{
SetDestination(hit.point);
}
}
2. ํน์ layer๋ง ์ฐพ๋๋ฒ
-
์๋ก์ด layer ๋ฅผ ์ถ๊ฐํ๋ค.
-
์ฐพ๊ณ ์ ํ๋ layer์ ๋ํ layerMask๋ฅผ ๋ง๋ ๋ค.
//Player์ ๋ํ layerMask int layerMask = 1 << LayerMask.NameToLayer("Player"); //layer ๋ฒํธ๋ฅผ ์๋ค๋ฉด ์ง์ ์ซ์๋ก ์ ๋ ฅํด๋ ๋๋ค. int layerMask = 1 << 8; //2๊ฐ ์ด์ ์ ํ์ int layerMask = (1 << LayerMask.NameToLayer("Player")) + (1 << LayerMask.NameToLayer("Enemy")); //2๊ฐ ์ด์ ์ ์ธํ๊ธฐ int layerMask = ((1 << LayerMask.NameToLayer("Player")) | (1 << LayerMask.NameToLayer("Enemy"))); layerMask = ~layerMask ;
-
LayerMask๋ฅผ ์ธ์๋ก ๋ฐ๋ raycast ํจ์ ํธ์ถํ๊ธฐ
if (Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit, Mathf.Infinity, layerMask)) { }
๐ ํฌ์คํ
๊ณต์ง
ใ
ใ
ใดใปใดใ