天天看點

Unity 資源加載方式

Unity 資源加載方式

廢話不多說,直接上代碼:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

/// <summary>
/// 資源加載
/// </summary> 

///加載平台  差異性
///--------------------------android平台-------------------------------------------
///    路徑屬性	                                                 路徑
///Application.dataPath	                /data/app/xxx.xxx.xxx.apk
///Application.streamingAssetsPath      jar:file:///data/app/xxx.xxx.xxx.apk/!/assets
///Application.persistentDataPath       /data/data/xxx.xxx.xxx/files
///Application.temporaryCachePath       /data/data/xxx.xxx.xxx/cache
///
///----------------------------ios平台---------------------------------------------
///     路徑屬性	                                                 路徑
///Application.dataPath	                Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data
///Application.streamingAssetsPath      Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
///Application.persistentDataPath       Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
///Application.temporaryCachePath       Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches


public class ResourceToLoad_ZH : MonoBehaviour
{
    [SerializeReference]
    private Image _Image;
    [SerializeReference]
    private Text _Text;

    private void Start()
    {
        StartCoroutine(ResourceMethod());
    }

    /// <summary>l
    /// 可讀 不能動态修改 持續存在
    /// </summary>
    /// <returns></returns>
    public  IEnumerator ResourceMethod()
    {
        //讀取到之後 注意類型
        _Image.overrideSprite = Resources.Load("Image/Image", typeof(Sprite)) as Sprite;
        yield return new WaitForSeconds(1);
    }

    /// <summary>
    /// 隻讀不可寫 持續存在 主要用來存放二進制檔案  可以通過 UnityWebRequest 或 WWW 類來讀取
    /// </summary>
    /// <returns></returns>
    public IEnumerator StreamingAssetsMethod()
    {
        string _StrPath = Application.streamingAssetsPath + "Str.txt";
        UnityWebRequest _WebRequest = new UnityWebRequest(_StrPath);
        yield return _WebRequest;
        _Text.text = _WebRequest.downloadHandler.text;

    }

    /// <summary>
    /// 運作時生成 持續存在
    /// </summary>
    /// <returns></returns>
    public IEnumerator PersistentMethod()
    {
        string _StrPath = Application.persistentDataPath + "Str.txt";
        UnityWebRequest _WebRequest = new UnityWebRequest("file://" + _StrPath);
        yield return _WebRequest;
        _Text.text = _WebRequest.downloadHandler.text;

    }

    /// <summary>
    /// AssetBundle 加載
    /// AssetBundle就是把prefab或者二進制檔案封裝成AssetBundle檔案
    /// 是Unity3D定義的一種二進制類型
    /// 可以通過 UnityWebRequest 或 WWW 類來讀取
    /// </summary>
    /// <returns></returns>
    public IEnumerator AssetBundleMethod()
    {
        // AssetBundle 路徑加載
        string _Url = "file:///" + Application.dataPath + "/AssetBundles/" + "maddie";//testassetbundle  

        //網絡加載
        using (UnityWebRequest _Uwr = UnityWebRequestAssetBundle.GetAssetBundle(_Url))
        {
            yield return _Uwr.SendWebRequest();

            if (_Uwr.isNetworkError || _Uwr.isHttpError)
            {
                Debug.Log(_Uwr.error);
            }
            else
            {
                //傳回下載下傳的AssetBundle,或null。
                AssetBundle _AssetBundle = DownloadHandlerAssetBundle.GetContent(_Uwr);

                if (_AssetBundle)
                {
                    var _Prefab = _AssetBundle.LoadAsset<GameObject>("Maddie");

                    if (_Prefab)
                    {
                        GameObject _MyTextPre = Instantiate(_Prefab, Vector3.zero, Quaternion.identity);
                    }
                }
            }
        }
    }

    //菜單欄 AssetBundles Button 建立
    [MenuItem("Asset/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string _AssetBundleDirectory = "Assets/AssetBundles";
        if (!Directory.Exists(_AssetBundleDirectory))
        {
            Directory.CreateDirectory(_AssetBundleDirectory);
        }
        //建構編輯中指定的所有資産包 變量( 建構位址、 資産包建構選項、目标建構平台)
        BuildPipeline.BuildAssetBundles(_AssetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }
}

           
如果實在有什麼不明白的地方 那就直接留言 看到我會回複的
好了,暫時就這麼多吧。
就這樣,與君共勉。