Home [Unity] Script로 Sprite를 사용하면 Sprite Atlas에서 가져올까??
Post
Cancel

[Unity] Script로 Sprite를 사용하면 Sprite Atlas에서 가져올까??

의문점을 제목으로 쓰기 위해 한 문장으로 나타내다 보니 잘 전달되었는지 모르겠다.

풀어쓰자면,

유니티에서 Sprite Atlas를 코드에서도 제공하는데 그중에서 GetSprite() 메소드가 있다.

1
public Sprite GetSprite(string name);

여기서 파라미터로 아틀라스에 압축된 이름을 전달하면 이름과 일치하는 아틀라스의 첫 번째 Sprite를 복제하고 반환해 준다.

근데 보통 우리는 코드로 Sprite를 참조할 때 아래와 같은 코드를 사용한다.

1
Sprite _sprite;

_sprite에 할당된 Sprite가 Atlas에 있는 이미지라면 Atlas에서 참조해서 가져오는 건지, 독립적인 Sprite 이미지로 가져오는 건지가 궁금해진 것이다.

1. 테스트

의문점을 확인하기 위해 간단한 테스트를 해보자

1-1. 세팅

일단, 테스트용 이미지를 아래와 같이 7개의 컬러 이미지로 준비했다.

Unity_img_42

그리고 Sprite Atlas도 하나 만들자

Sprite Atlas는 “Project 우클릭 -> Create -> 2D -> Sprite Atlas”로 생성할 수 있다.

Unity_img_51

Unity_img_52

2D 이후에 Sprite Atlas가 보이지 않는 분들도 있을 것이다.
Window -> Package Manager를 통해서 “2D Sprite”를 Install 하자
Unity_img_43

하이어라키(Hierarchy)에서 Canvas를 생성해서 아래와 같이 이미지를 배치하자

Unity_img_44

1-2. 테스트

Sprite를 코드로 넣기 위해 아래와 같이 세팅해 주자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class AtlasTest : MonoBehaviour
{
    [SerializeField]
    Image[] _testImag;

    [SerializeField]
    Sprite[] _testSprite;
    // Start is called before the first frame update
    void Start()
    {
        for (int i = 0; i < _testImag.Length; i++)
        {
            _testImag[i].sprite = _testSprite[i];
        }
    }
}

Unity_img_45

참고로
코드를 적용하지 않았을 때는 batches: 3이다.
Unity_img_46

Atlas가 없을 때

batches: 9

Unity_img_47

Unity_img_48

Atlas를 했을 때

batches: 4

Unity_img_49

Unity_img_50

2. 결론

코드에서 class Sprite를 사용해서 스프라이트 이미지를 사용해도

그 이미지가 Sprite Atlas에 포함되어 있다면 Sprite Atlas에서 참조해서 가져온다.

This post is licensed under CC BY 4.0 by the author.