일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 최적화
- 가이드
- 샘플
- ui
- 프레임워크
- Dots
- 암호화
- Unity Editor
- Dynamic Font
- TextMeshPro
- C#
- unity
- base64
- 2D Camera
- 이미지 폰트
- 단말기 해상도
- job
- Framework
- Job 시스템
- adfit
- sha
- 텍스트 메시 프로
- Custom Package
- DotsTween
- 다이나믹 폰트
- Tween
- 커스텀 패키지
- jumping ball
- RSA
- AES
Archives
- Today
- Total
EveryDay.DevUp
[Unity] 프레임 워크 개발 - ResourceManager ( v.0.1.0 ) 본문
▣ 기본 설정
https://everyday-devup.tistory.com/44
ResourceManager는 Addressable Package를 사용하여 Unity Asset의 프리팹, 텍스쳐, 폰트, 아틀라스와 같은 것을 동적으로 불러오는데 사용된다.
Object의 guid를 기반으로 캐싱하여 관리하며, 비동기적으로 어셋을 로드하여 관리한다.
※ GUID ( Globally Unique IDentifier )
: 키가 필요한 모든 곳에서 모든 컴퓨터 및 네트워크에서 사용할 수 있는 128 비트 정수로, 식별자가 중복될 확률은 매우 낮다.
public class ResourcesManager
{
Dictionary<int, Object> resources; // Addressable로 로드한 오브젝트를 관리
public ResourcesManager()
{
resources = new Dictionary<int, Object>();
}
public IEnumerator Load(AssetReference assetReference, bool isCaching, System.Action<Object> successCallback, System.Action failCallback)
{
int hashCode = assetReference.GetHashCode();
Object obj = null;
// 캐싱체크를 하면 Dictionary에서 먼저 검색하여 기존에 로드한 오브젝트를 찾음
if( isCaching )
{
resources.TryGetValue( hashCode, out obj );
if( obj != null )
{
successCallback.Invoke( obj );
}
}
// 로드한 오브젝트가 없을 경우 비동기로 오브젝트를 로드한 후, 로드가 끝나면 콜백을 보냄
if( obj == null )
{
AsyncOperationHandle<Object> handle = assetReference.LoadAssetAsync<Object>();
yield return handle;
if( handle.Status == AsyncOperationStatus.Succeeded )
{
obj = handle.Result;
Addressables.Release( handle );
if( isCaching )
{
resources.Add( hashCode, obj );
}
successCallback.Invoke( obj );
}
else
{
failCallback.Invoke();
}
}
}
// 캐싱을 하지 않은 오브젝트는 사용이 끝나면 Unload로 오브젝트를 없애주어야함
public void UnLoad(AssetReference assetReference)
{
assetReference.ReleaseAsset();
}
}
▣ 사용 가이드
: Addressable을 사용하려면 먼저 AssetReference 의 값을 불러올 수 있어야 한다. 간단하게는 GameObject의 public AssetReference 으로 Inspector에서 설정할 수도 있다.
public UnityEngine.AddressableAssets.AssetReference reference;
private void Start()
{
resourcesManager = new ResourcesManager();
StartCoroutine( resourcesManager.Load( reference, false, OnLoadSuccess, OnLoadFaile ));
}
void OnLoadSuccess(Object obj) {
GameObject.Instantiate( obj );
}
void OnLoadFaile() {
}
실제 사용 시에 AssetReference를 하나만 사용하는 경우는 드물기 때문에 ScriptableObject를 사용하여 관리하는 것을 추천한다. UI System에서 로드할 프리팹을 관리하는 방식으로 ScriptableObject를 사용하고 있다.
▣ 해당 컴포넌트 사용 관련 이론
https://everyday-devup.tistory.com/55
참고 자료 : https://docs.microsoft.com/ko-kr/dotnet/api/system.guid?view=netcore-3.1
'FrameWork' 카테고리의 다른 글
[Unity] 프레임 워크 개발 - UI Manager( v.0.1.1 ) (0) | 2020.07.08 |
---|---|
[Unity] 프레임워크 개발 - Custom Package 생성 (0) | 2020.06.17 |
[Unity] 프레임워크 개발 - 8. Canvas (0) | 2020.05.08 |
[Unity] 프레임워크 개발 - 7. 암호화 변수 (0) | 2020.05.05 |
[Unity] 프레임워크 개발 - 6. 데이터(파일) 쓰기/읽기 (0) | 2020.05.05 |