조금은 마이너한 정보입니다. (에디터 자체가 마이너하지만... 이 정보는 더 마이너한 느낌이 드네요)
사실 보통은 쓸 일이 없을 겁니다. 그래서 그런지 한글로 된 정보글은 없었습니다.
에디터 도구를 만들다 보면 현재 마우스 위치에 오브젝트를 알아오고 싶을 때가 있습니다. 그럴 때 사용할 기능을 소개하고자 합니다.
물론 Physics나 Physics2D를 활용하는 방법도 존재합니다. 하지만 앞선 방법은 콜라이더가 존재하는 오브젝트만 검출해냅니다. 지금 소개해 드리는 방법은 물리와 상관없는 방법입니다.
InitializeOnLoadMethod를 활용하여 duringSceneGui 이벤트를 구독합니다.
이후 HandleUtility.PickGameObject를 사용하면 됩니다.
출처 : https://docs.unity3d.com/ScriptReference/HandleUtility.PickGameObject.html
EventType.MouseDown 또는 EventType.MouseUp 시점에 호출하는 것이 적절하다는 공식 문서에 설명이 존재합니다.
테스트 결과 잘 동작하는 것을 볼 수 있습니다.
마우스 위치로만 찾다 보니 실제로 유니티 내에서 선택된 오브젝트와 코드 내에서 찾아낸 오브젝트가 다를 수 있습니다.
위와 같이 겹친 경우에는 마우스 위치에 해당하는 오브젝트를 가져옵니다.
겹치는 경우를 처리해 주고 싶을 때가 존재할 겁니다. 그러한 경우에 대한 해결책도 존재합니다.
출처 : https://docs.unity3d.com/ScriptReference/HandleUtility.PickGameObject.html
무시할 오브젝트를 선택할 수 있습니다. 즉 이미 찾아낸 오브젝트를 무시할 오브젝트에 넣는 방식을 활용하면 된다는 것입니다.
더 이상 찾아낼 수 있는 오브젝트가 없을 때까지 반복문을 돌리면 겹친 오브젝트를 모두 가져올 겁니다.
의도한 대로 겹친 오브젝트를 모두 가져왔습니다.