출처:
https://sunghojang.tistory.com/11
게임 오브젝트를 움직이는 작업을 하다보면,
화면을 벗어나 우주 공간처럼 끝없이 가게 되는 것을 볼 수 있다.
이때, 화면안에 있도록 제한을 해줘야 하는데 가장 간단하게 구현할 수 있는 것이 바로
Camera.main.WorldToViewportPoint 를 사용하는 것이다.
Transforms position from world space into viewport space.
Parameters:
position:
Vector3 Camera.WorldToViewportPoint(Vector3 position)
바로 카메라(Camera).WorldToViewportPoint(pos)로 써도 되지만, Camera.main을 쓰는 이유는
MainCamera라는 태그(Tag)가 붙은 첫번째 활성화된 카메라를 불러온다는 뜻
즉, 유니티 프로젝트 생성시 만들어지는 main카메라를 사용하겠다는 의미
WorldToViewportPoint(현재 위치)의 경우 position을 월드 공간에서 뷰포트 공간으로 변경시킴.
카메라의 좌측 하단은 (0,0 , 0.0)이며, 우측 상단은 (1.0 , 1.0)
또한, z position은 카메라로부터의 거리를 월드 단위로 환산한 값
따라서,
Vector3 pos = Camera.main.WorldToViewportPoint(transform.position);
if (pos.x < 0f) pos.x = 0f;
if (pos.x > 1f) pos.x = 1f;
if (pos.y < 0f) pos.y = 0f;
if (pos.y > 1f) pos.y = 1f;
transform.position = Camera.main.ViewportToWorldPoint(pos);
이렇게 하면, 현재 위치(transform.position)를 pos 변수에 대입하고,
pos.x < 0f 라면 왼쪽 화면 밖으로 나갔다는 의미이므로 아무리 왼쪽으로 이동해도 0.0f
pos.x > 1f 라면 오른쪽 화면 밖으로 나갔다는 의미이므로 아무리 오른쪽으로 이동해도 1.0f
pos.y < 0f 라면 아랫쪽 화면 밖으로 나갔다는 의미이므로 아무리 아래쪽으로 이동해도 0.0f
pos.y > 0f 라면 윗쪽 화면 밖으로 나갔다는 의미이므로 아무리 윗쪽으로 이동해도 0.0f
로 조건을 줘서 화면 안에서 못 벗어나게 한다.
그 다음에 다시 뷰포트 공간에서 월드 공간으로 변경시킨 뒤, 현재 위치에 넣으면 된다.
이렇게 한 뒤, 게임을 실행해보면
드래그를 방향키를 아무리 눌러도 화면을 벗어나지 않고 모서리까지만 가는 것을 볼 수 있다.
'Unity' 카테고리의 다른 글
Frame Timing Stats 의 설정 위치. (0) | 2023.12.07 |
---|---|
<Gradle build failed> Solution. Unity 2022.3.14~3.15 || licenses problem (0) | 2023.12.07 |
Gradle build failed. 해결방법 (라이센스 문제일 경우. 유니티 버전 2022.3.14/ 3.15) (0) | 2023.12.07 |
같은 캔버스 내에서 레이케스트 타겟이 먼저 적용되는 순서는 자식들의 가장 아래부터 위로 순차적용. (0) | 2023.01.06 |
유니 UI와 관련된 정보 잘 모아져있는 페이지. (0) | 2023.01.03 |