📑 목차
⓵ Lighting
𝟙 Global & Spot 값 설정하기
- 과정
𝟚 PPU
𝟛 Orthographic Size
- 공식 사용 이유
- Anchor & Pivot
- Action Points
⓶ 모의 면접
𝟙 면접 준비
𝟚 피드백
𝟛 알게된 점
- 멀티쓰레딩에서의 async
Lighting
▫️PPU(Pixels Per Unit)
- Pixels Per Unit: 한 유닛(=Unity에서 1단위 길이)에 들어가는 픽셀 수.
- PPU 16이면 스프라이트 16픽셀이 Unity상 1유닛 크기
- PPU 32면 스프라이트 32픽셀이 1유닛
▫️PPU를 16 → 32로 늘리면?
- 32x32 스프라이트가 있다고 가정
- PPU 16:
- 32픽셀 / 16(ppu) = 2유닛
- 게임 내에서 오브젝트 크기 2유닛만큼 큼
- PPU 32:
- 32픽셀 / 32(ppu) = 1유닛
- 게임 내에서 오브젝트 크기 1유닛만큼 작아짐
즉, PPU를 높이면 한 화면(씬)에서 같은 이미지가 더 작아져서 더 많이 들어감.
- PPU = 한 유닛에 몇 픽셀이 들어가는지'를 의미하기 때문에,
- PPU 값이 커지면, 같은 크기의 이미지라도 게임 내에서 실제 크기가 작아짐
▫️결론
- PPU를 올리면 한 화면에 들어가는 이미지 개수가 늘어나서,
스프라이트 자체가 더 작아짐 - 따라서, 화면의 월드 유닛 크기가 같다면,
PPU가 커지면 실제로 들어가는 스프라이트도 배로 많아짐
Orthographic Size
▫️공식 : Orthographic Size = (세로 해상도) / (PPU) / 2
- 세로 해상도: 1920x1080 화면이라면 1080 (실제 게임 뷰 해상도 기준)
- PPU (Pixel Per Unit): 스프라이트 임포트 세팅에서 설정한 몇 픽셀이 1 유닛인지
- 우리 게임은 16
- 2로 나누는 이유:
- Orthographic Size: 화면에서 위(Top)에서 아래(Bottom)까지 보이는 거리의 반
- 즉, 화면 중앙을 기준으로 위/아래로 각각 Orthographic Size만큼 보여줌
- 총 화면 높이는 Orthographic Size x 2 유닛이 되는 것
예시
- 1080 / 16 / 2 = 33.75→ 픽셀 깨짐 없이 완벽하게 보임
- → Orthographic Size를 33.75로 하면 화면 세로 전체에 1080픽셀이 딱 1:1로 맞춰짐
4를 추가로 나눈 이유
- 270 / 16 / 2 = 8.4375 → 이 값이 카메라 Orthographic Size로 들어가는데,
4배 줌을 해야 게임 씬이 정상적으로 보임! - → 그래서 480x270 해상도를 사용하는 거임
공식 사용 이유
- 픽셀 퍼펙트(1:1) UI/캐릭터/타일 표현이 목적
- 모든 타일, 스프라이트가 뿌옇게 깨지거나 흐릿해지지 않게 하기 위해.
- 고정된 픽셀 단위로 움직임이 부드럽고, 정밀하게 컨트롤 가능
- 해상도 독립적 세팅→ 실제 픽셀 기준 UI(HP바, 미니맵 등)도 함께 1:1로 맞출 수 있음
- → 플레이 해상도가 바뀌더라도 카메라가 Orthographic Size 기준으로 픽셀을 맞춰줌
PPU와 2로 나누는 이유
- PPU(Pixels Per Unit)로 한 번 나눠서 유니티 월드의 1유닛당 픽셀 수를 맞춤
- 2로 나누는 이유는 Orthographic Size는 반만큼 보여주는 세팅이라서
Anchor & Pivot
Anchor
- UI에서 부모 RectTransform의 상대적 위치를 지정
- (0, 0): 부모의 좌하단
- (0, 1): 부모의 좌상단
- (1, 0): 부모의 우하단
- (1, 1): 부모의 우상단
- (0.5, 0.5): 가운데 (중앙 기준)
- 앵커를 고정하면 해상도가 바뀌어도 해당 위치를 유지
- 예) HP바를 (0,1)로 하면 항상 화면 좌상단에 붙음
Pivot
- UI 오브젝트 자신에서의 기준점
- (0, 0): 좌하단이 기준
- (0, 1): 좌상단이 기준
- (1, 0): 우하단이 기준
- (1, 1): 우상단이 기준
- (0.5, 0.5): 정중앙 기준
- 이 값이 변화하면, 스케일 조정이나 이동, Fill(HP바 등) 할 때 어디서부터 변화할지 기준
예시
- HPBar
- Anchor (0, 1): 화면 좌상단에 고정
- Pivot (0, 1): 체력바 줄일 때 좌상단에서 오른쪽으로 줄어듦
- → 체력이 깎이면 HP바가 왼쪽에서 오른쪽으로 줄어드는 구조가 됨
- 미니맵
- Anchor (1, 1): 우상단에 고정
- Pivot (1, 1): 우상단을 기준으로 위치 계산
팁
- 캔버스 스케일러
- Reference Resolution: 게임에서 실제로 보여줄 해상도 (예: 480x270)
- Match: 가로/세로 맞춤 (16:9 비율이면 Height 쪽에 맞춤)
- 이미지 사이즈는 Set Native Size로 맞추면 픽셀 단위 그대로 나옴
- UI 부모 오브젝트는 무조건 Stretch(0,0 ~ 1,1) & Pivot 0.5,0.5 추천
- 자식 UI는 앵커, 피벗으로 위치 고정
- 중앙 앵커는 큰 UI에선 피하자 (해상도 변화 대응이 까다로움)
- UI는 해상도 기준 픽셀로 맞추고, 스케일은 캔버스 스케일러로만 조절
Action Points
- Orthographic Size = 세로 해상도 / PPU / 2
- → 화면에 픽셀이 1:1로 딱 맞게 카메라 보이도록 세팅
- 앵커는 부모 기준 위치, 피벗은 자기 기준점
- → 잘 조합하면 해상도 변환에 유연하고, UI가 흔들림 없이 딱 맞음
- 픽셀 퍼펙트하게 만들려면 이 계산식과 앵커/피벗 개념을 반드시 이해해야 함
모의면접
면접 준비
▫️멀티쓰레딩에서 async란?
- async는 C#에서 비동기(Asynchronous) 처리를 쉽게 해주는 키워드
- 멀티쓰레딩(여러 작업을 동시에 실행)과도 관련 있지만,
- 엄밀히 말하면 async/await는 멀티쓰레딩을 직접 다루는 기술이라기보다
메인 스레드를 멈추지 않고, 시간이 오래 걸리는 작업(예: 파일 IO, 네트워크 통신 등)을 기다렸다가,
결과가 오면 이어서 처리를 쉽게 만드는 문법임
예시
async Task DownloadFileAsync()
{
// 다운로드를 시작하고, 결과까지 기다림, 메인 스레드는 멈추지 않음
await SomeFileDownloader.DownloadAsync();
}
- await는 작업이 끝날 때까지 잠깐 쉬라는 뜻.
- 내부적으로는 별도의 스레드를 쓸 수도 있지만,
유니티에서는 코루틴처럼 싱글스레드 내 비동기 작업에도 자주 씀
답변 예시
Async는 C#에서 비동기 처리를 쉽게 할 수 있게 해주는 키워드로,
오래 걸리는 작업을 메인 스레드를 멈추지 않고 처리할 수 있게 해줍니다.