카테고리 없음

[최종프로젝트] Lighting값 설정하기 + 모의면접 - Unity 본캠프 68일차

julesnow 2025. 7. 17. 18:01

 

📑 목차

⓵ 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#에서 비동기 처리를 쉽게 할 수 있게 해주는 키워드로,
오래 걸리는 작업을 메인 스레드를 멈추지 않고 처리할 수 있게 해줍니다.