Ad Block 한번만 꺼주시면 안될까요..?
게임 개발/유니티C#

유니티 화면 끝 좌표(상하좌우) 가져오기.

UniCoti(유니코티) 2023. 2. 10.

간단한 반응속도 테스트기를 만들려고 하다가

랜덤 한 위치에 소환하되, 화면 안쪽에서 소환되게 하려는

의도가 있어서, 화면 끝좌표를 가져오는 법을 소개해 보겠다.


먼저, 개념들을 알려주겠다.

1. Screen.width

이 메서드는 현재 화면의 가로길이를 가져와준다.

또한 화면이 어떻게 달라지든 그에 맞게 가져오기 때문에

타깃 기기가 태블릿이든 휴대폰이든 문제없이 사용가능하다.

2. Screen.height

이 메서드도 비슷하게 화면의 세로길이를 가져와 준다.

이 메서드 또한 마찬가지로 화면 비율에 따라 가져와주기 때문에

태블릿이든 휴대폰이든 무슨 기기든 상관없이 사용가능하다.

3. Camera.main.ScreenToWorldPoint()

카메라의 좌표는 픽셀로 구성되어 있어서,

마우스의 좌표를 가져오기, 화면 끝을 가져오기를 하는 경우엔,

x좌표의 픽셀 하나, y좌표의 픽셀 하나를 가져오기 때문에

유니티의 좌표계와 다르다. 그걸 변환해 주는 메서드가

ScreenToWorldPoint()이다.


Vector2 Right = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width, Screen.height*0.5f));
Vector2 Left = -Right;
Vector2 Top = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width*0.5f, Screen.height));
Vector2 Bottom = -Top;

Right는 화면의 가로크기를 넣어서, 가로의 끝을 타깃 하고,

세로 크기의 반, 즉 가운데 또 한 번 말하자면 월드좌표계기준 0을 넣어주었다.

Left는 그 반대이고, y좌표는 어차피 0이라 -0 = 0이기 때문에

-Right로 넣어주었다.

 

같은 이유로 Top Bottom도 만들 수 있다.

 

여기까지 화면 끝을 다뤄봤는데,

랜덤 물체의 크기가 있는 경우에는 크기의 반만큼 벡터에서 빼줘야

물체가 잘리지 않는다.


이상으로 도움이 되었길 바라며,

 

끝.

댓글

💲 추천 글