기억저장고

Unity AssetBundle 생성/불러오기 본문

Unity

Unity AssetBundle 생성/불러오기

기억해조 2021. 6. 19. 02:27

Unity에서 AssetBundle을 사용하는데 많이 어려움을 겪었다. 

나는 FBX를 AssetBundle로 저장해서 서버에 올린다음에 WebGL로 불러오는 작업을 했었다. 

정말 어려웠다... 다 어려운방법들을 알려줘서.. 이해를 잘 못했다. (지금도 못함)

 

*WebGL 플레이중 FBX 받는법 

1. FBX를 AssetBundle로 묶는다.

2. AssetBundle을 서버에 올린다.

3. WebGL  플레이 중 AssetBundle을 다운받는다

4. 받은 AssetBundle안에 있는 FBX를 꺼낸다. 

 

이 순서로 진행해야한다. 

바로 서버에있는 FBX를 받고적용시키는거는 안돼더라..  

 

서버에서 Assetbundle 받을때 서버에서 .unity3d(에셋번들확장자) 확장자 접근권한 설정해줘야한다.

 

 

(1) AssetBundle Browser 설치

Window > PackageManager -(All packages) > AssetBundleBrowser검색 > install

 

*PackageManager에서 검색안될때 Git으로 설치

PackageManager > 왼쪽의 (+)버튼클릭 >  Add Package from Git URL 입력
https://github.com/Unity-Technologies/AssetBundles-Browser.git

 

 - Git으로 Package 설치 중 오류 있을때 해결방법

https://learnandcreate.tistory.com/729

 

유니티 패키지 설치 오류(No ‘git’ executable was found)

유니티 패키지 설치 오류(No ‘git’ executable was found) 깃에 공개된 패키지를 패키지 매니저(package manager)의 git URL를 사용하여 설치를 시도할때 또는 깃에 공개되어있는 패키지를 사용하는 프

learnandcreate.tistory.com

 

(2) 번들 만드는법

1."Asset Bundle Browser"를 PackageManager에서 import

2. window > assetbundle browser 클릭

3. Build 탭 선택 후 다음과 같이 세팅

AssetBundles Build 탭 세팅

4. 원하는 FBX파일 선택 후 assetbundle browser 의 Configure로 끌어다 놓기 (FBX이름으로 AssetBundle이름 생성됨)

5. "unity3d" 타이핑

- 1번 : 번들이름 (AssetBundle 생성하면 설정한 이름으로 생성됨)

- 2번 : unity3d 라고 작성

 

 

6. Build 탭에서 Build버튼 클릭 하면 AssetBundle 만들어짐 

- 저장위치 : Output Path

 

 

 

(3) 번들 불러오는법 

1. AssetBundle 불러오는 방법 (AssetBundle을 저장할때 "unity3d"라고 뒤에 붙여줬었음)

 public IEnumerator InitBundle(string bundleName)
 {
 	string path = bundleName + ".unity3d";
    AssetBundle bundle;
     
    float proccessing=0;//로딩 프로그레스 값
     using (var uwr =  UnityWebRequestAssetBundle.GetAssetBundle(path)) 
     {
       var operation = uwr.SendWebRequest();
            while (!operation.isDone)
            {
                proccessing = uwr.downloadProgress;
                yield return null;
            }

            bundle = DownloadHandlerAssetBundle.GetContent(uwr);
     }
 }

 

2.  AssetBundle 안에 있는 내용 불러오는 방법 (FBX)

public IEnumerator LoadObject(string objName)
    {
		//bundle : 이전에 불러온 AssetBundle값
        if (bundle == null)
        {
            yield return InitBundle(cushionCode);
        }

        var prefab = bundle.LoadAsset<GameObject>(objName);

        GameObject obj = Instantiate(prefab);
        
        yield return null;
    }
Comments