Unity | 유니티/Unity 개발 일지

[Unity] 스프라이트 아틀라스(Sprite Atlas) 사용 방법

maintain_H 2023. 1. 30. 13:13
반응형

1. 스프라이트 아틀라스(Sprite Atlas)

 

스프라이트 아틀라스는 여러 개의 텍스처를 단일 텍스처로 결합하는 에셋이다.

스프라이트 아틀라스를 사용하지 않고 여러 개의 스프라이트를 사용하면

스프라이트를 불러올 때 하나씩 하나씩 불러오는데 이건 여러 개의 드로우 콜을 발생시킨다.

그런데 스프라이트 아틀라스를 사용하면 하나의 텍스처를 불러오면서 하나의 드로우 콜을 발생시킨다고 한다.

 

결론은 좋다! 이거니까 스프라이트 아틀라스를 잘 사용하자.

 

 

2. 사용 방법

 

- Sprite Atlas 생성

 

Sprite Atlas를 사용하려면 놀랍게도 Project Settings에서 따로 설정을 해야 한다. 귀찮게..

 

Edit - Project Settings

 

 

기본값이 Disabled로 되어있다. 이걸 Always Enabled로 변경해준다.

 

그리고 Project 윈도우에서 우클릭을 해서 Sprite Atlas를 생성해준다.

Sprite Atlas를 Resources 폴더에 생성했다.

 

Create - 2D - Sprite Atlas

 

 

SpriteAtlas가 생성된 걸 확인할 수 있다.

 

 

- 참고

프로젝트 생성할 때 2D 모드로 생성해야지 사용할 수 있다.

 본인.. 아무 생각 없이 3D모드로 생성했다가 Sprite Atlas가 안 보여서 당황함..

 

 

 

 

- Sprite Atlas 설정

 

생성한 Sprite Atlas를 클릭하면 인스펙터 창에 저렇게 여러 설정이 있다.

설정에 대한 설명은 [이곳]에서 확인하면 된다.

 

 

그 중에 + 버튼을 눌러 사용할 sprite를 넣어준다.

 

 

 

이렇게 미리 준비한 sprite를 넣어주면 저렇게 이미지가 붙어서 있는 걸 볼 수 있다.

첫번째 준비는 끝!

 

 

 

- 오브젝트 생성

 

 

이미지랑 Sprite를 관리할 SpriteManager 빈 오브젝트와 스크립트를 생성한다.

물론 SpriteManager 오브젝트 없이 스크립트를 Image에 넣어서 사용해도 된다.

 

 

 

- 코드 작성

 

public class SpriteManager : MonoBehaviour
{
    public SpriteAtlas spriteAtlas; 

    public Image img;

    void Start()
    {
      	// public으로 선언 시, 생략하고 드래그앤드롭으로 가능
        spriteAtlas = Resources.Load<SpriteAtlas>("SpriteAtlas"); 
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0)) 
        	img.sprite = SpriteReturn("sprite0"); // 좌클릭
        if (Input.GetMouseButtonDown(1)) 
        	img.sprite = SpriteReturn("sprite1"); // 우클릭
        if (Input.GetMouseButtonDown(2)) 
        	img.sprite = SpriteReturn("sprite2"); // 휠클릭
    }

    public Sprite SpriteReturn(string spriteName)
    {
        return spriteAtlas.GetSprite(spriteName);
    }
}

 

또는 좌클릭으로 순서대로 이미지를 변경하려면 코드를 이렇게 짜면 된다.

public class SpriteManager : MonoBehaviour
{
    public SpriteAtlas spriteAtlas;

    public Image img;

    void Start()
    {
    	// public으로 선언 시, 생략하고 드래그앤드롭으로 가능
        spriteAtlas = Resources.Load<SpriteAtlas>("SpriteAtlas");
    }
    
    int num = -1;
    
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            num++;
            if (num > spriteAtlas.spriteCount) num = 0; // spriteCount: 아틀라스에 있는 sprite 개수
            img.sprite = SpriteReturn("sprite" + num);
        }
    }

    public Sprite SpriteReturn(string spriteName)
    {
        return spriteAtlas.GetSprite(spriteName);
    }
}

 

 

- 실행 결과

 

실행해보면 이렇게 제이크가 잘 나오는 걸 확인할 수 있다!

반응형