08. AssetSystem
왜 필요한가
Resources.Load 직접 사용은 금지된다 (Rules #14). Addressables를 직접 다루면 핸들 해제 누락, 캐시 관리 등 실수가 잦다. AssetSystem은 이를 단일 진입점으로 감싼다.
언제 사용하는가
GameObject/Config 등 어떤 에셋이든 런타임에 로드/언로드할 때.
프로젝트에서 어떤 역할인가
Integration 계층에서 Addressables를 감싸고, Diagnostics에 Asset.LoadCount/Asset.ReleaseCount/Asset.ActiveHandleCount/Asset.ActiveCacheCount를 자가 등록한다.
실제 게임에서는 언제 호출되는가
씬 진입 시 프리팹/Config 로드, 씬 종료 시 Release/ReleaseAll로 해제.
코드 예제
[Inject] private IAssetSystem _asset;
var result = await _asset.LoadAsync<GameObject>("Enemy/Goblin");
if (result.IsSuccess) _asset.InstantiateAsync(result.Value);
관련 Sample
Samples/Asset/AssetSystemSample.cs
Best Practice
로드한 핸들은 반드시 Release로 해제한다. Preload가 필요하면 PreloadAsync를 사용한다.
자주 하는 실수
- 로드 후
Release누락으로 메모리 누수 -> DiagnosticsAsset.ActiveHandleCount로 확인 가능 Resources.Load직접 사용
실습 과제
- Addressable Key를 하나 등록하고
LoadAsync로 불러온 뒤Release한다. Diagnostics Workspace에서Asset.ActiveHandleCount가 0으로 돌아오는지 확인한다.
이전 문서 / 다음 문서
이전: 07_Patterns.md 다음: 09_SceneSystem.md
관련 API
MCP_Index.md Asset 섹션