프로젝트를 2d로 만들었습니다 이게 관리하기 더 편리해서....
근데 만들다보니 레이를 3d로 쏴야하는 상황이 나왔는데, (카메라로부터 3d레이캐스트를 쏴서 판별하게끔)
이게 프로젝트를 2d로 만든 탓인지 디버깅해봐도 제대로 레이를 쏘고 있는데 콜라이더를 인지를 못합니다.
개빡칩니다... 이것때문에 닷새동안 시간을 얼마나 잡아먹었는지
프로젝트 싹 갈아엎고 새로 만들어보기도하고... ㅅㅂㅅㅂ
이거 해결 방법이 있을까요? 2d레이 쏴보니까 또 인지하네요 진짜 개빡치게
형님들 제발 해결책 좀 알려주세요 머리 터질 것 같습니다 ㅠㅠㅠㅠㅠㅠㅠ
이해를 돕기 위한 스크린샷 첨부할게요
playmaker 통해서 만들고 있어서 스크립팅을 보여드리고싶어도 그러지 못하는 점 양해바랍니다
보시면 이렇게 몇개의 콜라이더 존을 만들고, 카메라로부터 랜덤한 곳으로 ray를 쏴서 그곳이 존인지, 혹은 특정 오브젝트가 있는지를 판별한 후
맞다면 다시 랜덤한 곳으로 ray를 다시 쏘고, 아니라면 그 지점에 새로운 object를 만들게끔 하려고 합니다.
헌데 보시는 것처럼 디버그 레이는 제대로 향하고 있는데 디버깅값은 false(검출되지않음)으로 뜨네요
z값이 잘못된 거아니야? 라고 생각하실까봐 3d로 봐도 제대로 맞춘게 맞습니다.
2d콜라이더라서 3d레이가 검출을 못하나? 3d 레이는 2d 콜라이더를 검출 못하나요 죽어도?ㅠㅠ 이게 가능하다면 best이긴 한데
정작 3d 콜라이더도 검출을 못합니다. 이거라도 된다면 어떻게든 해보겠는데..... 도움 부탁드립니다 ㅠㅠ
## 수정
이렇게 2d레이의 경우 제가 원하는 콜라이더를 검출하기 전에 tile manager라는 의도하지 않은 다른 콜라이더에 걸리는 경우가 생겨서 3d ray로 쏘려고합니다.
ray cast all의 경우 경로상의 모든 콜라이더를 검출하니 제가 원하는 콜라이더도 찾아내겠지만, 하나의 콜라이더를 특정하지 않아서 오류가 생길 것 같아서 그렇습니다!
## 2차수정
요런거 때문에 3d ray를 쏘려고하는겁니다!
유니티면 2d, 3d는 설정 차이라서 그냥 설정 바꾸면 되는데?
https://docs.unity3d.com/Manual/2DAnd3DModeSettings.html
아...... 그럼 3d레이는 2d콜라이더를 절대 검출 못 하나요?
이렇게 말하면 못도와주고 하고 싶은게 뭔지를 알려줘 레이로 뭘하려는거임? 카메라레이로 오브젝트 찾는거야?
네 맞아요 카메라 레이로 오브젝트를 찾아서 레이어마스크로 원하는 오브젝트가 맞는지 판단하려고하는건데 그게 안 돼요
일단 레이를 어떻게 쏘고 잇어? 카메라기준으로 인풋 받은 좌표를 월드 포지션으로 쏘는거야?
네 화면상에 보이는 TileManager를 그 무선할당된 위치로 이동시킨 후, 그 위치를 받아서 그 곳으로 ray를 쏘고 있어요
일단 레이를 쏠때 layer 기준으로 관통해서 원하는 레이어 체크 하고 싶으면 Physics.RaycastAll을 써야 함
아.....! raycast all로 쏘니까 3d collider는 검출이 되네요! 근데 여전히 2d collider는 검출이 안 됩니다 ㅜㅜ 이건 해결 방법이 없는 건가요?
스크린 포인트를 월드로 변환해서 해봐 Vector2 rayPos = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
스크린포인트 world와 self 차이가 뭔가요? 저는 self는 object의 rotation에 따라 ray direction이 변하고 world는 그런거없이 고정이라고 이해했는데 제대로 이해한 게 맞나요....?? 자꾸 귀찮게 해드려서 죄송합니다 ㅜㅜ 그거랑은 별개로 world로 해봐도 2d콜라이더는 검출을 못하네요 ㅠㅠ
그건 레이를 쏠때 오브젝트 중심으로 쐈을때는 어처피 같은 월드상 위치로 검출하니까 상관없는데 화면 입력 해서 카메라 기준으로 레이를 쏘면 이야기가 달라짐
화면 입력해서 카메라 기준으로 ray를 쏜다는게 무슨 말씀인가요 이해를 못하겠어요 ㅠㅠ
2d 프로젝트의 경우 메인카메라가 z : -10 위치에 있다해도 2d ray를 쏘면 모두다 0,0위치에서 쏘아지는 거 아닌가요?
RaycastHit2D hit = Physics2D.Raycast(rayPos, Vector2.zero, 0f);
2d레이는 2d콜라이더를 잘 검출하는데, 3d레이로 2d콜라이더를 검출시킬 방법은 없나요....?
그 3d ray 로 검출해야 하는이유가 뭐야?? 카메라로 쏜느 레이라 2d ray로 하면 되는거아님??
음 raycast 2d의 경우 z축이 없다보니까 예를들어 카메라가 (0,0) 좌표에 있고, 검출해야할 오브젝트가 (3,3)에 있는데, (1,1) 위치에 방해 오브젝트가 있는 경우 (1,1) 위치의 오브젝트에 ray가 걸려버리잖아요? 그래서 잘못된 결과를 가져올 수 있을 것 같아서 3d ray로 검출시키려고 합니다.
우선 결론을 이야기하면 일반 레이캐스트로는 2dcollider 검출은 안돼는걸로 알고 있고 (3,3)오브젝트 검출하느데 왜 (1,1)오브젝트가 레이에 걸리지?
게시물 수정했습니다 마지막 사진 보시면 아래쪽의 콜라이더들을 검출하고자 ray를 쐈는데 2d라 모두 같은 z좌표축에 있어서 tilemanager라는 바로 코앞에 위치한 엉뚱한 콜라이더에 걸려버리고 말았습니다 이 경우가 검출 의도한 콜라이더(3,3위치한 콜라이더)를 찾아내지 못하고 tilemanager(1,1에 위치해서 잘못 검출된 콜라이더) 에 걸려버린 결과... 가 된거죠 제가 혹시 뭔갈 잘못 건드린걸까요?
저런경우는 layer를 설정해서 원하는 레이어만 선택해서 체크할 수 잇음
https://dallcom-forever2620.tistory.com/18
layermask 쓰긴 쓸건데 중간에 걸리는 object가 같은 layer를 사용할수도 있잖아요. 가령 (1,1)좌표에 box라는 이름의 레이어를 쓰는 오브젝트를 만들고, (3,3) 지점에도 같은 오브젝트를 만드는데, 중복해서 겹치는 곳에 놓지 않도록 하기 위해 ray를 사용할 경우 (1,1)에 이미 box오브젝트가 있어서 (3,3)으로 ray를 쏴도 (1,1)박스 콜라이더에 걸려서 (3,3)에 못 만드는 경우....
1,1에 만든 오브젝트가 3,3으로 쏴서 걸리면 그 위치에 오브젝트가 잇으니까 못만드느게 맞는거 아님?
아뇨아뇨 ray는 main camera로부터 쏘는거니까 0,0에서 쏘아지는거죠 제 설명이 부족한 거 같아서 게시물에 사진 추가했습니다 확인해주세요 ㅠㅠ
각 오브젝트는 좌표가 있음 스크린포트 화면상 위치 이경우는 x, y 만 있지 그리고 뷰포트라고 해서 화면상 좌표를 0~1로 나눠서 x,y 위치 잡는거 그담 월드 좌표가 게임 상 위치 마우스 인풋 하는 스크린 좌표를 카메라가 보는 월드 좌표로 변경해야지
아..? world 좌표는 그러니까 카메라로 보고있는 시야를 좌표로 나타낸 건가요?
월드는 게임상 좌표 하이락키 오브젝트 생성할때 그 오브젝트 position이 월드 좌표
https://docs.unity3d.com/ScriptReference/Physics2D.GetRayIntersection.html
음.. 일단 스크린포트 뷰포트 월드포지션 개념을 공부해야 할거 같은데. 1. 카메라위치에서 레이를 쏘는데 이걸 화면 좌표로 입력받는 스크린 포지션인지 카메라 화면에 보이는 뷰포지션인지 실질적 오브젝트인 월드포지션을 쓸건지 알아야하고 2. 카메라 위치에서 레이를 중앙으로 쏜다고 결국 그 레이가 닿는 부분이 0,0이라고 생각하는게 잘못된거
음.... 제가 개념공부가 아직 모자라서 이런 경우가 생겼나보네요 알겠습니다 그러면 스크린포트 뷰포트 월드포지션부터 찾아볼게요 감사합니다!!!! 이것저것 귀찮게 여쭈어봤는데 친절히 알려주셔서 정말 감사합니다 ㅠㅠ
일단 게임이 3d게임인지 2d 게임인지 부터 모르겟음 카메라상에서 ray를 쏘는건 2d 3d 크게 의미가 없음 어떤 게임을 만들고 싶은건지 알았으면 좀더 답변 잘해 줄수 있을거 같은데
2d 게임을 만들고 싶은데, 이 기능만큼은 3d에서만 가능한 것 같아서 이렇게 구현한 겁니다!
근데 아직 개념을 잘 몰라서 카메라상에서 ray를 쏘는게 왜 2d 3d 차이가 없는건지 모르겠네요 ㅜㅜ playmaker를 이용해서 만들고있어서그런가
밥먹고 간단하게 정리글 올려줄게
감사합니다!!!!!!! 정독하겠습니다!!!
글 읽어봐도 뭔말인지 모르겠누 ;;
https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=56092&_rk=CFQ&page=1