소소한 나의 하루들

프로젝트 재시작 : 스프라이트 PPU 변경하기 본문

개발/게임개발

프로젝트 재시작 : 스프라이트 PPU 변경하기

소소한 나의 하루 2025. 1. 20. 16:55

https://assetstore.unity.com/packages/2d/characters/top-down-2d-rpg-assets-pack-188718

 

Top-Down 2D RPG Assets Pack | 2D 캐릭터 | Unity Asset Store

Elevate your workflow with the Top-Down 2D RPG Assets Pack asset from Goldmetal. Find this & more 캐릭터 on the Unity Asset Store.

assetstore.unity.com

지금까지는 골드메탈님의 Top-Down 2D RPG 에셋 팩을 활용해왔다.

유튜브 강의와 함께 무료로 제공해주시는 에셋이기도 했고, 무엇보다 게임개발을 처음 시작하게 된 프로젝트 에셋이기에 익숙해서 계속 쓰고 있었다. 당분간은 프로토타입이 개발될 때까지는 이 에셋으로 진행하다가 나중에 직접 그래픽 리소스를 만들게 되면 그때 교체해야겠다는 생각이었다. 보면 알겠지만, NPC 대화창이나 버튼 등의 스프라이트를 제외하고는 플레이어, 맵 리소스 등 대부분의 스프라이트 아틀라스의 PPU가 16으로 설정되어있다.

 

그런데, 이번에 문제가 됐던 카메라에 대해 조금 깊게 파보면서 Pixel Perfect Camera의 Reference Resolution에 대해 이해하게되다보니 현재 스프라이트 위 아래가 잘리는 등의 문제가 pixel per unit 값 16이 아니라 32일 때는 어떻게 될지 궁금해졌다. (PPU 32일 때 해당 문제가 해결될지 궁금하기도 했고, 미리 적용하게될 PPU 32 스프라이트로 교체할 때 어떤 설정값을 바꿔야할까 알아보고 싶었다.)

그래서 pixel per unit을 16에서 32로 바꿨더니 위와 같은 문제가 발생했다. (스프라이트 아틀라스 + pixel perfect camera의 해당 옵션 모두 변경)

다행히 Grid 컴포넌트의 Cell Size를 (1, 1)에서 (0.5, 0.5)로 바꾸니 정상적으로 스프라이트 하나가 1칸을 가득 메우게 되어 위와 같은 문제는 사라졌으나, 하나의 걱정이 생겼다. 대화창에서 활용되는 NPC 초상화 스프라이트나 기타 UI 버튼에 쓰일 스프라이트처럼 PPU가 16이 아닌 다른 값을 갖는 스프라이트라면, 그때는 Cell Size (0.5, 0.5)인 Grid에 포함시키면 의도대로 배치되지 않기에 또 새로운 Grid 오브젝트를 생성해서 마치 한 Scene에 여러 레이어를 쓰듯 여러 Size의 Grid를 사용해야하는 문제가 발생할 것 같았다.

Cell Size (0.5, 0.5)일때 PPU 32 / 64 / 24

pixel per unit은 단순히 Grid 1칸에 배치되는 가로/세로에 배치되는 pixel 수를 의미하는 줄 알았다. 그래서 같은 Scale을 갖는 Grid 내에서라면 PPU가 16에서 32로 변경됐다고 하더라도 1칸의 가로 또는 세로에 차지하는 pixel 수가 16개에서 32개로 변경된 것일테니 Grid 1칸을 가득 채울 것이라고 생각했고, PPU가 32든 64든 24든 어떤 값이든 1칸을 가득 채우게 되겠지 라고 예상했다.


 

pixel per unit은 Grid (가로 또는 세로) 1칸을 차지하는 픽셀 수를 말하는 것이 아니다.

우선 Grid 컴포넌트의 Cell Size는 Unity Unit을 사용한다.

$$ \text{Unity Unit 크기} = \frac{\text{스프라이트의 픽셀 크기}}{\text{Pixel Per Unit}} $$

Unity Unit는 다음과 같이 계산된다.

Grid 컴포넌트의 Cell Size는 기본값 (1, 1)이라고 하고,

만약 스프라이트의 크기가 32 pixel(32x32)이라고 할 때 PPU가 32라면 해당 스프라이트의 Unity Unit은 1이 되어 Grid 1칸에 들어갈 수 있다.

스프라이트의 크기가 64 pixel이라고 할 때 PPU가 100이라면 Unity Unit은 0.64 Unit이 되어 Grid 1칸 내에서 0.64x0.64만큼의 비중을 차지하게 된다.

 

따라서 내 스프라이트가 Grid 1칸에 딱 맞게 채워지도록 하려면 스프라이트의 크기만큼을 Pixel per Unit으로 설정해야 스프라이트가 1Unit의 단위를 갖고 Grid 1칸에 맞게된다.


따라서 기존의 에셋 대신 새로 32 pixel 크기의 블럭 등으로 단순 도형 스프라이트로 교체할 생각이다. (리소스가 필요하다면 중간에 추가하는 방향으로) 이미 구현했던 시스템까지는 빠르게 적어도 내일 중으로 완성시켜야겠다. 적어도 시스템이 연계되어 프로토타입까지는 이대로 진행할 것이고 프로젝트 진행 중 혹은 특정 시점 이후에 그래픽 리소스도 작업하여 인게임에 적용할 계획이다.

리소스 교체 완료

사실 크게 복잡하다거나 어려운 부분이 아닌 것 같아서 그냥 배우고 다음으로 계속 진행해도 괜찮았을 것 같지만 이렇게 글로 적게되면, 다시한번 생각해볼 수 있고 또 앞으로의 생각이나 계획을 정리할 수 있는 시간을 가질 수 있어서 좋다.

Comments