카드를 위와 같이 나열했을 때 Sprite Renderer의 Layer Order가 높은 카드들이 '더 위' 에 있는 것처럼 느껴질텐데요.
허나 실제로는 월드 스페이스의 position.z 값이 동일한 경우가 있을 수 있죠.
IPointerEnterHandler를 사용하고 계시다면 카메라에 2D Raycaster가 부착되어 있을텐데요.
2D Raycaster의 경우 Physics2D.RaycastAll 이 아닌 Physics2D.Raycast 함수를 사용하는 경우 단 하나의 충돌만 판별해내는 것까진 맞습니다.
다만 position.z 값이 같을 경우 우리의 눈에 보이는 것과는 달리 같은 z 값을 가진 위치에 있다고 판단하게 되는 거죠.
그래서 (Collider가 2개 이상 겹쳐 있다면) 마우스는 '더 위' 에 있는 카드에 올려져 있는데도 뒤에 있는 카드랑 번갈아가면서 보이게 되는 겁니다.
이게 원인이구요.
따라서 원인에 따른 해결법은 position.z 값을 다르게 해주는 겁니다.
단순히 OnPointerEnter 때 z 값을 높이거나 낮춰주고, OnPointerExit 때 원상복구 해주면 되는 거죠.
물론 레이어를 바꾼다던가 하는 방법도 있긴 하겠지만, 위에 설명 드린 게 원인이고 직접적인 해결법은 position.z 값을 변경하는 것입니다.
두서 없이 글을 작성했는데 설명이 잘 되었으면 하네요. 감사합니다.
++ 내용 추가
가장자리에 마우스 둘 때도 깜빡거린다고 하셔서...
사실 이 부분에 대해서는 보여진 영상만으로는 원인을 찾기 어렵습니다.
보시다시피 (OnPointerEnter/Exit 사용 시) 가장자리에 두는 것만으로도 깜빡거리진 않습니다.
그렇다면 환경이 다르다고 유추해볼 수 있는데...
개인적인 추측으로는 다른 Collider 가 겹치는 게 아닐까 싶습니다.
제 추측이 정확하진 않을 수 있지만 비슷한 사례를 예로 들자면 UI 등의 Raycast Target이 겹치는 경우인데요.
TextMesh Pro 등의 RectTransform이 너무 크게 설정되어 있는 경우
UI 이미지나 텍스트는 정상적으로 보일 수 있으나 실제로는 큰 부분을 차지하고 있는 걸 확인할 수 있습니다(노란 선).
이런 경우에는 Raycast 에 간섭이 생겨 딱 저 크기(노란 선 부분)만큼 제대로 동작하지 않습니다.
비슷한 원리로 다른 Raycast Target 이 관여를 해 깜빡 거리는 게 아닐까? 하고 추측해봅니다...
지식이 늘었다
근데 이걸로는 카드 겹친부분은 고치겠지만, 가장자리에서 깜빡거리는걸 못 고침
그 부분에 대해서는 올라온 영상만으로는 모르겠네요. 마우스 커서가 안 보이는데 가만히 있다는 가정 하에 OnPointerEnter 와 Exit이 번갈아 작용할 요소는 Collider 정도일 거 같네요. 중간에 다른 Collider 가 개입할 요소가 있거나, 보이지 않는 다른 UI Canvas가 있는 경우가 있을 수 있구요. 간혹 Textmesh Pro 등 UI의 Raycast Target 이 켜져 있다던가 등의 이유로 충돌 간섭이 생길 수는 있거든요.
나도 처음에는 이거 생각했는데 가장자리에서 깜빡거린다길래 자세한 내부 스크립트는 모르겠지만 이건 인식이 됐다 안 됐다가 반복되는거라 인식 범위 늘리라는 거의 확실히 고칠 수 있는 방법을 말해준거
영상 보시면 카드 두 개가 반복되는 버그가 나오고 그 뒤에 카드 하나만 떴다 안 떴다 하는 버그 보여요
음… 그럼 글쓴 분께서 Collider 달아 놓은 것들에 기즈모 띄워서 확인하는 게 베스트일 거 같아요. 유니티 메인 함수를 사용하는 건데 유니티가 인식 못할 확률보다 무언가 잘못 세팅 되어 있을 확률이 클 거 같아서요!
원인 찾으려고 영상 돌려보다 댓글을 다시 봤는데 글쓴 분께서 님이 말씀하신 인식 범위 늘리는 방법으로 해결을 이미 하신 것 같네요 제가 피곤한 채로 봐서 잘 확인을 못 했나봐요. 참 민망하게 됐네요… 그래도 혹시 참고하실 분들 계실까봐 글은 그냥 두겠습니다
이것도 잘 봤어요 Z축 변경하는것도 다른 문제 생겼을때 인식할 수 있게 됐네요
AR프로젝트 만드는애들도 이거 새겨 들어라