Table of Contents

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 누락으로 메모리 누수 -> Diagnostics Asset.ActiveHandleCount로 확인 가능
  • Resources.Load 직접 사용

실습 과제

  1. Addressable Key를 하나 등록하고 LoadAsync로 불러온 뒤 Release한다.
  2. Diagnostics Workspace에서 Asset.ActiveHandleCount가 0으로 돌아오는지 확인한다.

이전 문서 / 다음 문서

이전: 07_Patterns.md 다음: 09_SceneSystem.md

관련 API

MCP_Index.md Asset 섹션