스프라이트 아틀라스 사용방법
프로젝트를 만들때에 다수의 텍스처 파일이 들어 있을 수 있고, 일반적으로 Unity는 씬의 각 텍스처에 대해 드로우 콜을 발행한다. 하지만 많은 텍스처가 포함된 프로젝트의 경우 여러 개의 드로우 콜이 존재하면 리소스를 많이 소비하여 프로젝트의 성능을 저하시킬 수 있다. 그래서 사용하는 방법이 스프라이트 아틀라스를 사용하는 것이다.
스프라이트 아틀라스 란?
- 여러 개의 텍스처를 단일 텍스처로 결합하는 에셋이다. Unity는 여러 개의 드로우 콜을 발행하는 대신 이러한 단일 텍스처를 호출함으로써 하나의 드로우 콜을 발행할 수 있다. 그러면 큰 성능 소모 없이도 패킹된 텍스처에 동시에 액세스할 수 있다.
생성방법
Resources파일에 Sprite Atlas를 생성(Create -> 2D -> Sprite Atlas)
설정방법
설정에 대한 세부적인것들은 Unity Documentation을 참고: https://docs.unity3d.com/kr/2021.3/Manual/class-SpriteAtlas.html
그리고 저장할 sprite를 넣어준다.
그리고 Editor안에 Sprite Packer 에서 Mode를 기본값인 Disabled에서 Always Enabled로 변경
사용방법
SpriteManager 오브젝트를 만들어서 거기게 SpriteManager스크립트를 붙이면 준비는 끝이다.
코드작성
public class SpriteManager : MonoSingleton<SpriteManager>
{
public SpriteAtlas spriteAtlas;
private void Start()
{
spriteAtlas = Resources.Load<SpriteAtlas>("/SpriteAtlas/SpriteAtlas");
}
public Sprite SpriteReturn(string spriteName)
{
return spriteAtlas.GetSprite(spriteName);
}
}
이렇게 작성하면 다른 곳에서 Sprite를 원할때 함수를 호출해서 Sprite를 반환해 자기가 원하는 이미지를 넣으면 된다.
오류발생!!
위와 같이 했는데 이미지가 붙어서 나오는 상황이 발생했다!!
Padding을 4에서 8로 높여보기도 하고 이미지 사진을 줄여가면서도 넣어봤는데 계속 사진이 붙여진 상태로 나왔다.
해결
Sprite Atlas 설정에 Tight Packing이라는 부분을 체크해제하니깐 이미지가 하나씩 나오게 됐다.
Tight Packing은 SpriteAtlas에 투명으로 되어있는 부분들을 최소화 시켜주는 옵션인데 그게 체크가 되어있어서 아이템들이 모여져서 나오게 된거 같다.
짜잔!!