# 오디오
사운드의 경우, 플랫폼에 관계없이 아래와 같이 설정합니다.
플랫폼 별로 설정을 달리할 필요가 없습니다.
다만 배경음의 경우에는 품질을 100으로 높이고, 효과음의 경우에는 품질을 낮춰서(19) 사용합니다.

# 이미지
이미지는 2D 이미지라면 최적화를 고려해서 아틀라스를 사용합니다.
아틀라스란, 여러 리소스를 이미지 파일 하나에 욱여넣은 것을 말합니다.

아래 이미지를 예시로 들면, 26개의 이미지가 하나의 파일에 담겨 있는 상태입니다.
프로그램은 이미지 한 장만 로드하고, 인덱스로 구분하여 해당 위치의 리소스를 화면에 렌더링하는 방식을 사용합니다.

GPU 입장에서는 이미지 26장을 로드하는 것보다, 이미지 한 장을 로드하여 메타 파일 정보를 토대로 이미지를 가져오는 것이 훨씬 빠릅니다.
이유는 CPU와 GPU 간 작업 명령을 거치는 과정에서 성능 저하가 발생하기 때문입니다.
CPU가 GPU에게 작업을 명령하는 것을 드로우 콜이라고 합니다.
만약 일정 프레임마다 애니메이션을 재생한다고 생각하면 CPU와 GPU 사이에 SRV(Shader Resource view / GPU 읽기 전용 객체)를 올리고 내리는 작업 명령이 반복됩니다. 이 과정에서 성능 저하가 발생하는데, 아틀라스를 사용하면 CPU에서 딱 한번만 텍스처 로드 명령을 내리고 GPU에는 해당 텍스처에서 UV값만 변경해가며 사용하면 되기 때문에 동일한 리소스를 사용한다면 한 번의 드로우콜로 처리할 수 있습니다.
이제 드로우콜을 줄이기 위해서 아틀라스를 만드는 작업을 할건데, 유니티 엔진에서 제공하는 기능을 사용합니다.
먼저 프로젝트 세팅을 해줍니다.
1. 메뉴 - Edit - Project Settings - Editor - Sprite Atlas - Mode 변경
기본 설정이 Disable입니다. 이 상태에서는 아틀라스를 사용할 수 없습니다.


프로젝트 세팅에서 아틀라스를 허용해줍니다.

이제 아틀라스를 제작합니다.
2. 프로젝트 폴더 우클릭 - Create - 2D - Spirte Atlas

그러면 아틀라스 애셋이 하나 생성되는데 이름을 입력합니다.
3. Sprite Atlas의 인스펙터 창으로 가서, 하단의 패킹할 오브젝트에서 + 버튼을 누르고, 리소스가 담긴 폴더를 지정합니다.
해당 리소스 폴더에 있는 이미지 파일을 조사하여 자동으로 아틀라스를 만들어줍니다.

4. Sprite Altas의 플랫폼 별 Override for Platform을 체크합니다.
공통 사항으로 타이트 패킹도 기본 값은 체크인데, 해제합니다.
리소스의 투명 영역을 제거하고 촘촘하게 붙이면서 이미지 가장자리가 깨질 확률이 높아집니다.

Default(기본)는 수정하지 않습니다.
Override for 플랫폼을 체크하면, 하단의 옵션을 수정할 수 있게 됩니다.
모바일 게임에서 사용될 텍스처 크기는 가급적 2048을 넘기지 않도록 합니다.
포맷은 크게 ETC2와 ASTC로 나뉘는데 ASTC가 최신 압축방식으로, 숫자가 낮을수록 압축률이 낮고 품질이 높습니다.
기본값 6x6에서 환경에 맞게 품질을 조절합니다.
마찬가지로 IOS도 동일하게 설정해줍니다.
그러면 콘솔 창에 경고가 뜰 수 있습니다. 이는, 이미지 파일이 이미 압축된 상태인데, 또 아틀라스로 압축을 하면 이미지 품질이 낮아질 수 있다는 경고입니다. 원본 이미지 파일의 인스펙터 창에서 압축 품질을 사용 안함을 선택하는 방법도 있는데 선택사항입니다.

이제 아틀라스로 만들고자하는 리소스들을 전부 1 ~ 4번 과정을 반복해줍니다.
이 과정이 끝나면, 이제 코드에서 리소스를 로드하는 방법이 바뀌어야 합니다.
왜냐면 리소스 타입이 Texture2D가 아니라 SpriteAtlas가 되었기 때문입니다.
저는 Addressables로 리소스를 관리하는데, 아틀라스를 사용하면서 기존 리소스 폴더는 삭제하고 프리팹과 아틀라스만 Addressables에 다시 추가해줬습니다.

그러다보니 이전의 파일 주소가 "{Type}/{Type}.prefab", "{Type}/{Type}_{Resources_Id}.png"와 같은 형태에서
"Type", "TypeSpriteAtlas"로 주소도 바뀌었습니다.
여기서 아틀라스는 Addressables 기준으로 아래처럼 로드합니다.

기존에는 Resources.Load<Texture2D>(경로)로 가져와서 Spirte.Create(GameObject) 였다면
이제는 SpriteAtlas를 가져와서 바로 SpriteAtlas.GetSprite(스프라이트 이름)으로 가져옵니다.

해당 방식으로 코드를 리팩토링해줬더니 아틀라스에서 정상적으로 이미지를 추출했습니다.


'Unity > 프레임워크' 카테고리의 다른 글
| [Unity] Localization Remote load (0) | 2026.01.01 |
|---|---|
| [Unity] Localization : 다국어 지원 시스템 (0) | 2025.12.30 |
| [Unity] Google AdMob 연동 (0) | 2025.12.29 |
| [Unity] csv 파일 관리 : DataTable Manager (0) | 2025.12.04 |
| [Unity] 관리자 클래스 : Singleton Pattern (0) | 2025.12.04 |
