Unity Raycast ์‚ฌ์šฉ๋ฒ•

1 ๋ถ„ ์†Œ์š”

๐Ÿ’ก ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ ์ ๊ธฐ

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)) {
          
    }        
    

๐Ÿ”” ํฌ์ŠคํŒ… ๊ณต์ง€
ใ…ใ…‡ใ„ดใ„ปใ„ดใ…‡

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: