์ ๋ํฐ UI ์ง๋ฌธ์ ์ฌ๋ฆฌ๊ณ ๊ณ์ ์ฐพ์๋ณด๊ณ ์์ ํด๋ณด์์์๋ ํด๊ฒฐ์ด ๋์ง ์์ ๋ค์ ์ง๋ฌธ๋๋ฆฝ๋๋ค.
Raycast2D๋ฅผ ์ฐพ์ ์๋ํด๋ณด์์์๋ ์ฑ๊ณผ๋ฅผ ์ป์ง ๋ชป ํ์ต๋๋ค. ํด๋น UI๋ ํ์ฌ Canvas๋ฅผ ๋ฒ์ด๋ ์ํ์
๋๋ค.
UI ์์ ์ฌ๋ ค์ ธ ์๋ ๊ฒ์์ค๋ธ์ ํธ๋ฅผ ๋๋ ์ ๋ ๊ทธ ์๋์ ์๋ UI๊ฐ ํด๋ฆญ๋์๋ค๊ณ ์ธ์์ ํ์ง ์๋ ๋ฐฉ๋ฒ์ด ๋ญ๊ฐ ์์๊น์?
+ gifํ์ผ์ ์ฒจ๋ถํ์ต๋๋ค.
์ง๊ธ ๋์จ ์๋ฒ ์ํ์์ข์๋ฏ ํ์ผ ๋ค ๊บ ์ ธ์ ๋์ค๋ค
๊ฒ์ ์ค๋ธ์ ํธ ํด๋ฆญํ์๋ ์กฐ๊ฑด๋ฌธ ์ด๋ป๊ฒ ํ์?
๊ฒ์ ์ค๋ธ์ ํธ์๋ ์กฐ๊ฑด๋ฌธ์ ์ ์ผ๊ณ , UI์๋ง ์ ์ฉ์์ผฐ์ต๋๋ค.
if (EventSystem.current.IsPointerOverGameObject() == false) { return; } var pointerEventData = new PointerEventData(null); pointerEventData.position = Input.mousePosition; List<RaycastResult> results = new List<RaycastResult>(); graphicRaycaster.Raycast(pointerEventData, results) if (results.Count <= 0) return;
if (results[0].gameObject == gameObject) { //์ดํ ๋๋ ธ์ ๋ ์คํ }
๊ทธ๋ฅ ํฐ์นํ ์ ์๋ ์ค๋ธ์ ํธ์ OnPointerClick์ด๋ OnDrag๊ฐ์ ์ด๋ฒคํธ ๋ถ์ฌ์ ์ฐ๋๊ฑด ์๋?? EventSystem์ด ์์์ ์ ์ผ ์์ ์๋ ์ค๋ธ์ ํธ ์ฐพ์์ ๊ทธ ์ค๋ธ์ ํธ์๋ค๊ฐ ์ด๋ฒคํธ ํธ์ถ์์ผ์ค
์... ์จ๋ณด๊ฒ ์ต๋๋ค
๋ ์์ ์ ๊ฒ์ ์ค๋ธ์ ํธ๋ ๊ฒน์ณค์๋๋ ํฐ์น๋ฅผ ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ๋บ์ด๊ฐ์ผ ํ๋๋ฐ ๋บ์ง๋ฅผ ๋ชปํ๋๊น UI์ ํฐ์น ์ ๋ ฅ์ด ๋ค์ด๊ฐ๊ณ ์๋ํ๋ค๋๊ฑฐ ์๋? ๊ทธ๋ฌ๋ฉด ์ ๋ ฅ์ ๊ด๋ฆฌํ๋ ์ด๋ฒคํธ์์คํ ์ด๋ ํธํ๋๊ฒ ์ง์ผํ ๊ฒ ๊ฐ์. ๋ณดํต์ UI ๋ฐ์ ๊ฒ์์ค๋ธ์ ํธ๊ฐ ์์ด์ ๋ฒํผ์ ๋๋ ์๋๋ ๊ฒ์์ค๋ธ์ ํธ์ ์ ๋ ฅ์ด ์๋ค์ด๊ฐ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ฐ ๋์ ๋ฐ๋์. ๊ทธ๋ฌ๋๊น ๋ ์ด์บ์คํธ ๋ง๊ณ ์ด๋ฐ ๋ฐฉ๋ฒ์ ์ด๋จ๊น ์ถ์ด์ ๋งํด๋๋ฆฐ๊ฑฐ์
LayerMask
ํด๋น ์ค๋ธ์ ํธ์ Canvas Group ์ปดํฌ๋ํธ ์ถ๊ฐํ๊ณ BlocksRaycast ์ฒดํฌํด๋ด
์ด๊ฑฐ๋ ๋๋๊ทธ ์ํ๋ฅผ bool ์๋ค๊ฐ ์ ์ฅํด๋๋๊ฒ ์ ์ผ ์ฝ๊ฒ ๋๋ฐ์ฉ
๋ค๋ค ๊ฐ์ฌํฉ๋๋ค! ํ์ฌ๋ ๋ฐฉ์์ ์ฐํํด์ ๊ตฌํํ๊ธฐ ์ฌ์ด ์ชฝ์ผ๋ก ์ง๊ณ ์์ต๋๋ค. ๋์ค์ ์ง์ง ์ด์ฉ ์ ์์ด ๊ตฌํํ ์ผ์ด ์๊ธฐ๋ฉด ์ฐธ๊ณ ํ๊ฒ ์ต๋๋ค.