Unity&C#/Unity

[Unity] AssetBundle

리네엔 2022. 9. 17. 04:16

AssetBundle Build

Assetbundle 만들기

Assetbundle 빌드 스크립트 만들기

using UnityEngine;
using UnityEditor;
using System.IO;

public class BuildAssetBundle : MonoBehaviour
{
    static string assetBundleDirectory = "Assets/AssetBundles";
    [MenuItem("Tools/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
#if UNITY_ANDROID
        BuildPipeline.BuildAssetBundles(assetBundleDirectory,
                                        BuildAssetBundleOptions.None, 
                                        BuildTarget.Android);
#elif UNITY_IOS
        BuildPipeline.BuildAssetBundles(assetBundleDirectory,
                                        BuildAssetBundleOptions.None, 
                                        BuildTarget.StandaloneOSXUniversal)
#else
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, 
                                        BuildAssetBundleOptions.None, 
                                        BuildTarget.StandaloneWindows64);
#endif
    }
}

Load AssetBundle

  1. Local

    using UnityEngine;
    using UnityEngine.Networking;
    using System.IO;
    public class Assetbundleload : MonoBehaviour
    {
     [SerializeField]
     AssetBundle assetbundle;
    
     private void Start()
     {
         // AsssetBundle의 로컬 패스
         string assetBundleDirectory = 
             Application.dataPath + "/AssetBundles/prefabs.cube";
         // AssetBundle로드
         assetbundle = AssetBundle.LoadFromFile(assetBundleDirectory);
         // AssetBundle로부터 원하는 에셋 로드
         GameObject prefab = assetbundle.LoadAsset<GameObject>("Cube");
         Instantiate(prefab);
     }
    }
  2. Wab

    using UnityEngine;
    using UnityEngine.Networking;
    using System.IO;
    public class Assetbundleload : MonoBehaviour
    {
     [SerializeField]
     AssetBundle assetbundle;
    
     private void Start()
     {
         StartCoroutine(InstantiateObject());
     }
    
     IEnumerator InstantiateObject()
     {
         // AssetBundle의 web url (예제에선 local path)
         string assetBundleDirectory =
             "file:///" + Application.dataPath+"/AssetBundles/prefabs.cube";
         // 웹요청
         UnityWebRequest request =
             UnityWebRequestAssetBundle.GetAssetBundle(assetBundleDirectory, 0);
    
         yield return request.SendWebRequest();
    
         // 웹에서 AssetBundle을 받아옴
         assetbundle = DownloadHandlerAssetBundle.GetContent(request);
         // 받아온 AssetBundle로부터 원하는 에셋 로드
         GameObject prefab = assetbundle.LoadAsset<GameObject>("Cube");
         Instantiate(prefab);
     }
    }

'Unity&C# > Unity' 카테고리의 다른 글

[Unity 2D] Sprite Flip  (0) 2024.10.14
[Unity] Frame  (0) 2024.10.14
data path  (0) 2023.09.25
[input system] 작성중  (0) 2022.09.20
[Unity] Create asset menu  (0) 2022.09.01