* 2D Project라고 가정
유저가 폭격 스킬을 사용한다고 해보자
그러면 유저에게 폭격 지점과 범위를 정하는 UI를 제공하게 될 것인데
폭격 범위를 정하는 Circle모양의 UI와, 실제 폭격효과를 보여주는 Circle모양의 GameObject 간의
크기가 동일해야 합리적인 UI가 될 것이다
이때 폭격 효과를 보여주는 Circle은 GameObject의 Sprite이어서 WorldSpace에 존재하고
폭격 범위를 정하는 Circle은 UI의 Image여서 ScreenSpace에 존재하는데 이 둘의 크기를 어떻게 같게 할 수 있을까?
먼저 ScreenSpace는 카메라에 의해서 결정된다는것을 알아야 한다.
현재 프로젝트의 해상도가 1920x1080이라고 가정해보자.
Debug.Log(Screen.Height); // 1080
Debug.Log(Screen.Width); // 1920
좌하단이 (0, 0)에 대응되고 우상단이 (1920, 1080)에 대응되는 ScreenSpace가 존재하는데
만약 Height나 Width 둘 중 하나에 대응되는 WorldSpace의 Unit의 크기를 알게 된다면
제목에 적혀있는 문제는 바로 해결된다.
이 크기는 Main Camera의 Inspector에 있는 Size를 보면 알 수 있다.
요놈은 Screen.Height / 2 만큼의 ScreenSpace의 길이가 WorldSpace에서는 몇 Unit으로 계산되는지를 나타낸다.
만약 Size가 1이라면 우리의 Height 값인 1080의 절반인 540이 1 Unit의 길이를 갖는다는 것이다.
즉,
float unitInScreenSpace = Screen.height / (Camera.main.orthographicSize * 2);
// WorldSpace의 1 Unit에 해당되는 ScreenSpace의 길이
해결!
'etc > Unity' 카테고리의 다른 글
[Unity] 코루틴 일시정지시에 시점 복구하기 (0) | 2022.02.24 |
---|---|
[Unity] VS에서 Unity 메세지 띄우는 법 (0) | 2021.07.12 |
[Unity] 코루틴, Coroutine이란? (0) | 2021.07.12 |