게임 오브젝트를 움직이는 작업을 하다보면,
화면을 벗어나 우주 공간처럼 끝없이 가게 되는 것을 볼 수 있다.
이때, 화면안에 있도록 제한을 해줘야 하는데 가장 간단하게 구현할 수 있는 것이 바로
Camera.main.WorldToViewportPoint 를 사용하는 것이다.
바로 카메라(Camera).WorldToViewportPoint(pos)로 써도 되지만, Camera.main을 쓰는 이유는
MainCamera라는 태그(Tag)가 붙은 첫번째 활성화된 카메라를 불러온다는 뜻이다.
즉, 유니티 프로젝트 생성시 만들어지는 main카메라를 사용하겠다는 의미이다.
WorldToViewportPoint(현재 위치)의 경우 position을 월드 공간에서 뷰포트 공간으로 변경시킨다.
카메라의 좌측 하단은 (0,0 , 0.0)이며, 우측 상단은 (1.0 , 1.0)이다.
또한, z position은 카메라로부터의 거리를 월드 단위로 환산한 값이다.
따라서,
이렇게 하면, 현재 위치(transform.position)를 pos 변수에 대입하고,
pos.x < 0f 라면 왼쪽 화면 밖으로 나갔다는 의미이므로 아무리 왼쪽으로 이동해도 0.0f
pos.x > 1f 라면 오른쪽 화면 밖으로 나갔다는 의미이므로 아무리 오른쪽으로 이동해도 1.0f
pos.y > 0f 라면 윗쪽 화면 밖으로 나갔다는 의미이므로 아무리 윗쪽으로 이동해도 0.0f
로 조건을 줘서 화면 안에서 못 벗어나게 한다.
그 다음에 다시 뷰포트 공간에서 월드 공간으로 변경시킨 뒤, 현재 위치에 넣으면 된다.
이렇게 한 뒤, 게임을 실행해보면
드래그를 방향키를 아무리 눌러도 화면을 벗어나지 않고 모서리까지만 가는 것을 볼 수 있다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
뷰포트 ?
월드 좌표 ??
로컬 좌표 ???
ViewportToWorldPoint ???
WorldToViewportPoint ?????
ScreenToWorldPoint ???????
카메라 관련 용어 및 개념을 좀 더 익혀야겠다..
'게임 개발 관련 > Unity3D' 카테고리의 다른 글
[유니티] UGUI - (1) 캔버스(Canvas)의 개념과 중요성 (0) | 2018.03.07 |
---|---|
[유니티] 마우스 드래그해서 게임오브젝트 끌어 이동하기 (1) | 2018.03.05 |
[유니티] 유니티에서 게임오브젝트를 드래그(Drag)로 이동하는 코드... (1) | 2018.02.26 |
[유니티] 함수의 반복 작업 호출. Invoke & InvokeRepeating & CancelInvoke (0) | 2018.02.24 |
[유니티] 유니티에서 팝업창 띄우기 (0) | 2018.02.24 |