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);
}
}
如果實在有什麼不明白的地方 那就直接留言 看到我會回複的
好了,暫時就這麼多吧。
就這樣,與君共勉。