📌 개요
SpriteAtlas GetSprite 함수가 동작하지 않는 문제
해결책
① GetSprite(string name)의 함수 인자가 Packed Sprite Name과 동일한지 체크
② Project Settings - Editor - Mode 값이 Sprite Atlas V2 - Enabled 인지 체크
📌 문제 분석
private Sprite GetSprite(AtlasType atlasType, int id)
{
if (_loadedAtlasTypeDict.TryGetValue(atlasType, out SpriteAtlas atlas))
{
return atlas.GetSprite($"{atlasType}_{id}");
}
else
{
Debug.LogError($"아틀라스 타입 '{atlasType}'이 로드되지 않았습니다.");
}
return null;
}
코드 설명
- [ _loadedAtlasTypeDict ] 딕셔너리에서 [ atlasType ] enum에 해당하는 value을 체크
- 없다면 에러 메세지를 출력
- 있다면 atlas.GetSprite 메서드를 통해 Sprite을 가져오고 반환
하지만 Sprite가 계속 null이 뜨면서 제대로 불러오지 못하고 있습니다.
📌 원인 분석 및 해결책
디버그를 해보겠습니다.
일단 SpriteAtlas을 제대로 불러와지긴 했군요.
그렇다면 왜 GetSprite은 null을 반환할까요?
지금보니 SpriteCount 값이 0이네요.
아무래도 SpriteAltas는 가져왔지만 내부 패킹된 Sprite들은 메모리에 로드되지 않은 것 같습니다.
해결 방법은 [ Project Settings ] - [ Editor ] - [ Mode ] 값을 Sprite Atlas V2 - Enabled로 변경하면 됩니다.
저는 런타임 환경에서 어드레서블을 활용하여 SpriteAtlas을 메모리에 할당합니다.
이 방식은 V1은 제공하지 않기 때문에 V2을 사용해야 합니다.
'유니티(Unity) > 이슈 도감' 카테고리의 다른 글
[Unity 이슈] InitializeOnLoad 주의 사항 (0) | 2024.12.23 |
---|---|
[Unity 이슈] 커스텀 패키지 Addressable 이슈 (1) | 2024.12.22 |
[Unity 이슈] 커스텀 패키지 종속성 문제 (1) | 2024.12.21 |
[Unity] 직렬화가 되지 않는 문제 (1) | 2024.12.06 |
[Unity] 마우스 좌표와 월드 좌표 변환 주의 사항 (2) | 2024.12.04 |