일단 포지션에는 월드 포지션 실질적인 오브젝트 위치 


그 다음의 로컬 포지션 부모 오브젝트가 있을시 자식 포지션


이 두좌표가 인스펙터에서 보여지는 포지션 값임


그 밖에는 스크린 포지션 화면 해상도에 따른 위치 


그 다음은 뷰 포지션 카메라에 보여지는 위치를 0~1기준으로 잡은거



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523881b722a013ef5084cfe79a7f0330a578b15f939b48c5099f212cdc7eebba2ffed1dc681b86f


위에 사진은 저 오브젝트 부분을 마우스 입력햇을때 나오는 좌표인데


실질적으로 마우스 입력은 스크린 포지션으로 입력이 됨


화면 해상도가 1600 1200인거 생각하면 왼쪽 아래 (0,0) 우측 상단은 (1600,1200)이 되고


뷰포지션은 각 좌표가 0~1인로 변환된거  


뷰포지션과 스크린포지션을 월드 포지션을 변경시 주의사항은 월드 포지션 현재는 2D 라서 나오는데 스크린포지션 뷰포지션경우 x y좌표만 있어서


3D 에서 월드 포지션으로 변경할때 z 좌표는 별도로 설정해주고 변환해주어야 함



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523881b722a013ef5084cfe79a7f033673a8814f068db77b68e9ddc5a509f7e39b573c3a2540610bb

오브젝트 월드포지션 상태임



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523881b722a013ef5084cfe79a7f0330a578b15f939b48c5099f2129fc7eae8f2ffbd4cc6369959

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523881b722a013ef5084cfe79a7f0330a578b15f939b48c5099f2129fcfb0bbf7abbb4dc659404e


해당 오브젝트에 월드 포지션은 그대로 인데 카메라에 보이는 위치에 따라 스크린 포지션과 뷰포지션을 달라짐



레이캐스트 이야기 하다 좌표이야기가 나온 이유


보통 카메라에서 레이를 쏜다 하면 마우스입력, 화면터치로 받는 경우가 많은데 이 경우 입력 받는게 스크린 포지션임 그래서 그입력받은 걸 그대로 쓸수가 없음


그래서 요기서 방법이 몇가지가 있는데 


1. ScreenPointToRay 사용 가장 무난함. 스크린 좌표(입력 받은값)에서 방향만 설정해주면 됨 단 2d에서 그대로 사용 불가


2. 오브젝트 위치를 스크린 포지션이나 뷰포지션으로 가지고 있고 입력 받은 좌표를 해당 좌표로 변환해주고 단순 벡터 거리로 비교하여 일정 거리 있으면 체크방식


3. 2d에서는 입력값을 월드로 변환하면 그대로인점을 이용, 입력 좌표를 월드 포지션으로 변경하는 방법  


  Vector3 worldPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y));

  RaycastHit2D hit = Physics2D.Raycast(worldPos, transform.forward, 15);

   if (hit)

   {

         Debug.Log(hit.collider.name);

    }


아래서 길게 이야기 했는데 결국 3번 방법 이용 하면 될거임.


일단 내가는 아는거에 대해서 쓰긴했느데 틀린거나 잘못된거 있으면 피드백 해주시면 감사