일단 포지션에는 월드 포지션 실질적인 오브젝트 위치
그 다음의 로컬 포지션 부모 오브젝트가 있을시 자식 포지션
이 두좌표가 인스펙터에서 보여지는 포지션 값임
그 밖에는 스크린 포지션 화면 해상도에 따른 위치
그 다음은 뷰 포지션 카메라에 보여지는 위치를 0~1기준으로 잡은거
위에 사진은 저 오브젝트 부분을 마우스 입력햇을때 나오는 좌표인데
실질적으로 마우스 입력은 스크린 포지션으로 입력이 됨
화면 해상도가 1600 1200인거 생각하면 왼쪽 아래 (0,0) 우측 상단은 (1600,1200)이 되고
뷰포지션은 각 좌표가 0~1인로 변환된거
뷰포지션과 스크린포지션을 월드 포지션을 변경시 주의사항은 월드 포지션 현재는 2D 라서 나오는데 스크린포지션 뷰포지션경우 x y좌표만 있어서
3D 에서 월드 포지션으로 변경할때 z 좌표는 별도로 설정해주고 변환해주어야 함
오브젝트 월드포지션 상태임
해당 오브젝트에 월드 포지션은 그대로 인데 카메라에 보이는 위치에 따라 스크린 포지션과 뷰포지션을 달라짐
레이캐스트 이야기 하다 좌표이야기가 나온 이유
보통 카메라에서 레이를 쏜다 하면 마우스입력, 화면터치로 받는 경우가 많은데 이 경우 입력 받는게 스크린 포지션임 그래서 그입력받은 걸 그대로 쓸수가 없음
그래서 요기서 방법이 몇가지가 있는데
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번 방법 이용 하면 될거임.
일단 내가는 아는거에 대해서 쓰긴했느데 틀린거나 잘못된거 있으면 피드백 해주시면 감사
와................ 이런 기능이 있는 줄 몰랐습니다 말씀해주신거 보고 유니티 켜서 이것저것 한참 실행해본 후에야 무슨 뜻인지 비로소 이해했습니다 설명 엄청 쉽게 해주셨는데도 관련 지식이 없다보니 만져보고나서야 깨닫네요 하나 배우고갑니다 정말 감사합니다!!