스프라이트 아틀라스 매니져 (SpriteAtlas Manager)
Unity 에서 Sprite Altas를 런타임중에 로드 및 관리하는 코드로 UnityEngine.U2D에 포함되어있다.
key를 기반으로 처리하는 형태이고 다른 형식으로도 가능하다.
public class SpriteAtlasManager : SingletonMono<SpriteAtlasManager>
{
private Dictionary<string, SpriteAtlas> SpriteAtlases = new Dictionary<string, SpriteAtlas>();
void Start()
{
SpriteAtlasManager.atlasRequested += RequestAtlas;
}
void OnApplicationQuit()
{
SpriteAtlasManager.atlasRequested -= RequestAtlas;
}
public void RequestAtlas(string _key, System.Action<SpriteAtlas> callback)
{
bool exist = ExistSpriteAtlas(_key);
if (false == exist)
{
var result = Resources.Load<SpriteAtlas>(_key);
if (result == null)
{
Debug.LogError($"[SpriteAtlas] Load Error ::{_key} !! ");
return;
}
SpriteAtlases.Add(_key, result);
}
callback(GetSpriteAtlas(_key));
}
private bool ExistSpriteAtlas(string _key)
{
if(SpriteAtlases == null)
{
Debug.LogError($"[SpriteAtlas] ExistSpriteAtlas Initalize Error !! ");
return false;
}
return SpriteAtlases.ContainsKey(_key);
}
private SpriteAtlas GetSpriteAtlas(string _key)
{
if (false == ExistSpriteAtlas(_key))
return null;
SpriteAtlases.TryGetValue(_key, out SpriteAtlas returnValue);
return returnValue;
}
}
반응형
해당 Singleton Mono 클래스가 Start 되면 SpriteAtlasManager가 atlasRequested 콜백을 수신해서 Sprite가 Atlas에 등록할때까지 표시되지 않고 트리거되는 순간 이벤트를 확인할수 있다.
SpriteAtlasManager.Instance.RequestAtlas("SpriteAtlas/BackGroundAtlas", (result ) => {
if(result!=null)
Debug.LogVerb($"[SpriteAtlas] {result.name}");
});
필요한 시기에 (런타임 상황) SpriteAltas를 로드해서 사용하면 된다.
실제 리턴되는 값은 SpriteAtlas로 result.GetSprite("이름") 을 통해서 스프라이트를 가져올수 있다.
대체적으로 SpriteAtlas를 런타임(RunTime)에서 로드해서 재사용하는 과정 또는 Addressable 에서 많이 사용 한다.
Unity SpriteAtlasManager : [ 링크 ]
Unity SpriteAtlasManager.atlasRequested : [ 링크 ]
★☆☆☆☆
반응형
'개발 > Unity' 카테고리의 다른 글
Unity)Unity DoTween 적용 해보기 (0) | 2022.01.24 |
---|---|
Unity ) 맵 오브젝트 투명처리 (Transparent/VertexLit) (0) | 2022.01.24 |
Unity) Unity 플레이 모드 속도 옵션(Configurable Enter Play Mode ) (0) | 2022.01.18 |
Unity) Unity Events (Inpsector Unity Event) (0) | 2022.01.17 |
Unity) 싱글 톤 스크립터블 오브젝트 (ScriptableSingleton) (0) | 2022.01.15 |
댓글