Addressable은 메모리를 관리할때 매우 편하게 사용하도록 유니티에서 제공해주는 기능이다. BG Database에서도 Addressable을 이용해서 메모리 관리를 할 수 있다. 뿐만 아니라 BG에서 제공해주는 기능을 사용하면 훨씬 간단하게 메모리 관리를 해 줄 수 있다.
1. CodeGen 설정
CodeGen을 설정하면 BGDatabase에서 Addressable을 더 편하게 사용할 수 있다.
BG Database의 Addons 탭으로 이동해서 Enabled를 활성화한다.
1-1 Code generator 설정
Code generator 항목의 우측에 Use default를 클릭하면 자동으로 설정된다.
1-2 Source File 설정
임의의 폴더에 BGCodeGen.cs를 만든다. BG Database의 Addons 탭으로 돌아가서 Source File 우측의 Choose file을 클릭한다. BGCodeGen.cs를 연결한다.
1-3 prefix 설정
Class names prefix와 Field names prefix에 본인이 원하는 문자를 설정한다. 나는 C_, F_로 설정했다. Generate를 클릭하면 CodeGen이 완료된다.
기억이 가물가물하지만 테이블을 만들거나, 제거할때마다 Generate를 클릭해야 하는 걸로 알고 있다.
2. Addressable에 오브젝트 등록
2-1 프리팹 만들기
Hierarchy에서 Cube와 Sphere 오브젝트를 생성하고 프리팹으로 만든다. Hierarchy에서 생성한 Cube와 Sphere 는 삭제한다.
2-2 Addressable에 등록
Cube와 Sphere 프리팹의 Inspector에서 Addressable을 활성화한다.
3. 유니지패키지 임포트
아래의 링크로 이동한다.
https://www.bansheegz.com/BGDatabase/Downloads/RuntimeAddressables/
다운로드 페이지에서 link를 클릭하면 유니티패키지 파일이 다운로드된다. 다운받은 BGDatabaseAddressables1.3.unitypackage 파일을 유니티에 임포트한다. 이녀석을 다운받지 않으면 BGDatabase에 Addressable로 등록한 Asset을 추가할 수 없다.
4. BG Database에 추가하기
4-1 필드 만들기
BG Database의 Configuration 탭으로 이동한다. + 버튼을 눌러 필드를 생성한다. 이때, Loader는 Addressables이며 Field의 Type은 unityPrefab이다.
4-2 Assets 등록
Database 탭으로 이동해서 위에서 만든 UnityPrefab 필드에 아까 Addressable로 등록한 프리팹을 연결한다.
5. BGAddressablesMonitorGo 만들기
BG Database에서 제공하는 BGAddressablesMonitorGo 를 사용하면 Addressable을 정말 간편하게 사용할 수 있다. Hierarchy뷰에서 빈게임오브젝트를 만들고 이름은 BGAddressablesMonitorGo 로 변경한다. BGAddressablesMonitorGo 의 컴포넌트로 BGAddressablesMonitorGo.cs를 추가한다.
6. 스크립트 작성
BGAddressableTest.cs를 만들고 아래의 코드를 입력한다.
using UnityEngine;
using BansheeGz.BGDatabase;
using UnityEngine.AddressableAssets;
namespace BG_DatabaseSample
{
public class BGAddressableTest : MonoBehaviour
{
byte[] databaseData;
private void Awake()
{
databaseData = Addressables.LoadAssetAsync<TextAsset>(BGLoaderForRepoCustom.CustomDatabaseGuid).WaitForCompletion().bytes;
BGRepo.SetDefaultRepoContent(databaseData);
BGRepo.Load();
InstantiatePrefab();
}
private void InstantiatePrefab()
{
// #1 Load{FieldName}Async 메서드 사용
C_TEST_Field.GetEntity(0).LoadF_UnityPrefabAsync(prefab => Instantiate(prefab));
// #2 동기 로딩을 위해 생성된 속성 사용
Instantiate(C_TEST_Field.GetEntity(1).F_UnityPrefab, Vector3.right * 2, Quaternion.identity);
Invoke("OnReleaseInstance", 1f);
}
public void OnReleaseInstance()
{
// 생성된 게임오브젝트는 파괴되지 않고 메모리에 로드된 에셋만 없어진다.
C_TEST_Field.GetEntity(0).ReleaseAddressablesAssets();
C_TEST_Field.GetEntity(1).ReleaseAddressablesAssets();
}
}
}
코드 설명
Addressable에 등록된 자산을 로드 후 인스턴트 하는 방법에는 3가지 방식이 있다. #1 방식은 비동기로 진행되는 코드이다. 그리고 #2는 동기 방식으로 진행되는 코드이다. 나머지 하나는 기존의 Addressable를 이용해서 로드하는 방식인데 이 방식에 대해서는 따로 설명안 한다. 궁금하면 BGDatabase 홈페이지에 가서 직접 봐라.
OnReleaseInstance() 에서 ReleaseAddressablesAssets() 는 메모리에서 해당 데이터를 해제하는 코드이다. 씬에 생성된 게임오브젝트는 파괴되지 않으며 메모리에 로드된 애셋만 메모리에서 해제된다.
7. 결과 확인
0.5 초 후에 Addressable에서 BGTesterA와 BGTesterB가 해제된다.
메모리에서 해제되었지만 씬에 이미 생성된 게임오브젝트는 파괴되지 않는다.
즉, 필요한 만큼 생성한 뒤 메모리를 해제하고 다시 필요하면 메모리에 애셋을 로드하는 방식으로 쓰면 메모리 관리가 훨씬 수월해질거라 판단된다.
8. 구매 링크
아래의 링크로 구매하시면 유니티 에필리에이트로 활동하는 저에게 소정의 원고료가 지급되어 큰 힘이 됩니다.
'Unity Assets 추천 > BG Database' 카테고리의 다른 글
유니티 에셋 추천 - BG Database 암호화 #4 (2) | 2022.12.06 |
---|---|
유니티 에셋 추천 - BG Database 커스텀 로더 #3 (0) | 2022.12.05 |
유니티 에셋 추천 - BG Database 설정 #2 (8) | 2022.12.05 |
유니티 에셋 추천 - BG Database 소개 #1 (0) | 2022.12.05 |
댓글