Unity Assets 추천/BG Database

유니티 에셋 추천 - BG Database 커스텀 로더 #3

개양반 2022. 12. 5.
728x90

지난 시간에는 Resources 폴더에 로더 위치를 설정했다. 하지만, Resources 폴더는 여러가지 단점으로 인해 프로토타입에서만 사용하는 권장하는 폴더이다. 그래서 이번엔 원하는 폴더에 로더 위치를 설정하는 커스텀 로더에 대해 다뤄본다.

리소스폴더를 사용하더라도 리소스폴더의 단점과 BGDatabase가 내부적으로 어떻게 동작을 하는지 명확히 알고 있고 그래서 리소스폴더에서 사용해도 괜찮다는 판단이 내려졌다면 Resources폴더에 로더를 위치해도 된다. 본인이 명확하게 알고 있다면 말이다.

 

1. 로더 종류와 특징

  Resources StreamingAssets Custom
파일
위치
Resources 폴더 Assets/StreamingAssets 폴더 아래 프로젝트의 모든 위치
장점 추가 노력 없이 어디서나 작동 게임을 다시 빌드하지 않고 데이터베이스 파일을 업데이트할 수 있습니다. 1. 데이터베이스 파일은 프로젝트 아래 어디에나 놓을 수 있습니다.

2. 런타임 시 모든 위치에서 데이터베이스 콘텐츠를 로드할 수 있습니다.
단점 리소스 폴더에 많은 에셋을 저장하면(Unity는 권장하지 않음) 데이터베이스 로딩 속도가 느려질 수 있습니다. WEBGL 플랫폼에는 Custom 로더가 필요하다. (즉, WEBGL 에서는 못 쓴다)

1. 데이터베이스 콘텐츠를 로드하는 코드를 구현해야 합니다.

2. 액세스하기 전에 BGRepo.SetDefaultRepoContent 메서드를 사용하여 데이터베이스 콘텐츠를 로드하고 할당해야 합니다.

3. 현지화 애드온에서 지원하지 않음
활성화
방법
파일 bansheegz_database.bytes는 리소스 폴더 중 하나에 위치해야 합니다. 파일 bansheegz_database.bytes는 Assets/StreamingAssets 폴더 아래에 있어야 합니다.  

 

 

2. 커스텀 로더 만들기

2-1 로더로 만들 폴더 생성

Assets 폴더에 TEST_Loader 폴더를 생성한다.

bansheegz_database.bytes 파일을 TEST_Loader폴더로 이동시킨다.

 

2-2 Mata 파일 수정

bansheegz_database.bytes.meta 파일을 열고 guid 값을 3637ea689da0cff4b8d5c0fb5d609c15로 변경한다. bansheegz_database.bytes가 아닌 bansheegz_database.bytes.meta 파일이다. 

meta 파일은 유니티에서 안 보인다.

 

2-3 Reload

유니티를 재실행한다. Unity를 열고 BGDatabase 창에서 Reload 버튼을 클릭한다.

 

Settings - Main - Database file에서 path가 TEST_Loader 위치인지 확인한다.

 

 

3. Custom Loader에서 데이터 불러오기

Custom Loader에서 데이터베이스에 접근하려면 아래의 코드로 수동으로 콘텐츠를 로드해야 한다.

* Resources 로더는 아래의 작업이 필요없다.

    byte[] content = someContent; //todo load content
    BGRepo.SetDefaultRepoContent(content);
    BGRepo.Load();

그래서 이번에는 콘텐츠를 Addresable로 받은 뒤에 로드하는 방법에 대해 다뤄보겠다.

 

3-1 Addresable 패키지 설치

Package Manager에서 Addressable를 설치한다. Addressable에 대한 자세한 설명은 아래 링크를 참고한다.

[Unity 자습서/Addressable] - 유니티 Addressable #1 - 기본편

 

3-2 bansheegz_database를 Addressable로 등록하기

Addressable Groups창에서 Create Addressable Settings 버튼을 눌러 AddressableAssetData를 생성한다. (잘 모르겠으면 위에 링크 클릭한다.) TEST_Loader 폴더에 있는 bansheegz_database을 Addressable로 등록한다. 

 

3-3 스크립트 작성

Asset 폴더에 BGTest.cs 파일을 만들고 아래의 코드를 작성한다.

using UnityEngine;
using BansheeGz.BGDatabase;
using UnityEngine.AddressableAssets;


namespace BG_DatabaseSample
{
    public class BGTest : MonoBehaviour
    {

        private void Start()
        {
            TEST();
        }

        private void TEST()
        {
            // Addresable 에서 Data를 받아온 뒤 Byte[] 변수에 할당한다.
            var databaseData 
            = Addressables
            	.LoadAssetAsync<TextAsset>(BGLoaderForRepoCustom.CustomDatabaseGuid).WaitForCompletion().bytes;

            // 수동으로 콘텐츠를 로드한다.
            BGRepo.SetDefaultRepoContent(databaseData);
            BGRepo.Load();
            
            
            // Database에 접근 한뒤 데이터를 불러와서 쓰는 코드이다.
            // 여기서부터는 Resourcs 로더와 같다.
            // 상세한 설명은 다음 시간에!!
            BGMetaEntity table = BGRepo.I["TEST_Field"];
            BGEntity entity = table.GetEntity(0);

            float entityValue = entity.Get<float>("Damege");
            Debug.Log(entityValue);
        }
    }
}

 

위 스크립트를 Hirarchy뷰의 아무 GameObject에 넣어서 테스트한다. 값이 제대로 불러오는걸 확인할 수 있다. 다음 시간에는 BG Database를 암호화하는 것에 대해 다뤄보겠다. 한번에 다 올리면 저품질 걸릴까봐.. 나눠서 올려야 할 듯 싶다.

 

4. 구매 링크

아래의 링크로 구매하시면 유니티 에필리에이트로 활동하는 저에게 소정의 원고료가 지급되어 큰 힘이 됩니다.

 

댓글

💲 추천 글