유니티 WorldToViewportPoint와 화면 밖으로 나가지 못하게 하는 코드 작성

출처:

https://sunghojang.tistory.com/11

 

[유니티] 화면 밖으로 게임 오브젝트 못 나가게 하는 코드...

게임 오브젝트를 움직이는 작업을 하다보면, 화면을 벗어나 우주 공간처럼 끝없이 가게 되는 것을 볼 수 있다. 이때, 화면안에 있도록 제한을 해줘야 하는데 가장 간단하게 구현할 수 있는 것이

sunghojang.tistory.com

게임 오브젝트를 움직이는 작업을 하다보면,

 

화면을 벗어나 우주 공간처럼 끝없이 가게 되는 것을 볼 수 있다.

 

이때, 화면안에 있도록 제한을 해줘야 하는데 가장 간단하게 구현할 수 있는 것이 바로

 

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 

 

로 조건을 줘서 화면 안에서 못 벗어나게 한다.

 

그 다음에 다시 뷰포트 공간에서 월드 공간으로 변경시킨 뒤, 현재 위치에 넣으면 된다.

 

이렇게 한 뒤, 게임을 실행해보면 

 

드래그를 방향키를 아무리 눌러도 화면을 벗어나지 않고 모서리까지만 가는 것을 볼 수 있다.

  Comments,     Trackbacks