Unity中的資源資源的處理種類大致分為:Resources、StreamingAssets、AssetBundle
是作為一個(gè)Unity的保留文件夾出現(xiàn)的,也就是如果你新建的文件夾的名字叫Resources,那么里面的內(nèi)容在打包時(shí)都會(huì)被無條件的打到發(fā)布包中。
特點(diǎn):
只讀,即不能動(dòng)態(tài)修改。所以想要?jiǎng)討B(tài)更新的資源不要放在這里。
會(huì)將文件夾內(nèi)的資源打包集成到.asset文件里面。因此建議可以放一些Prefab,因?yàn)镻refab在打包時(shí)會(huì)自動(dòng)過濾掉不需要的資源,有利于減小資源包的大小。
資源讀取使用Resources.Load()。
StreamingAssets
StreamingAssets和Resources很像。同樣作為一個(gè)只讀的Unity3D的保留文件夾出現(xiàn)。不過兩者也有很大的區(qū)別,那就是Resources文件夾中的內(nèi)容在打包時(shí)會(huì)被壓縮和加密。而StreamingAsset文件夾中的內(nèi)容則會(huì)原封不動(dòng)的打入包中,因此StreamingAssets主要用來存放一些二進(jìn)制文件。
特點(diǎn):
只讀不可寫。
主要用來存放二進(jìn)制文件。
只能用過WWW類來讀取。
AssetBundle就是把prefab或者二進(jìn)制文件封裝成AssetBundle文件。
特點(diǎn):
是Unity3D定義的一種二進(jìn)制類型。
使用WWW類來下載。
首先我們新建一個(gè)Resources目錄,并且并將資源放在這目錄中。
1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.UI; 4 5 public class LoadResources : MonoBehaviour { 6 7 public Image image; 8 9 // Use this for initialization10 void Start () {11 12 image.overrideSprite = Resources.Load ("animotiong_2", typeof(Sprite)) as Sprite;13 14 }15 16 }Resources
首先我們新建一個(gè)StreamingAssets目錄,并且并將資源放在這目錄中。
1 using UnityEngine; 2 using System.Collections; 3 4 public class LoadResources : MonoBehaviour { 5 6 string _result; 7 8 9 // Use this for initialization10 void Start () {11 12 StartCoroutine(LoadXML());13 14 }15 16 IEnumerator LoadXML() {17 string sPath= Application.streamingAssetsPath "/test.xml";18 WWW www = new WWW(sPath);19 yield return www;20 _result = www.text;21 }22 }streamingAssetsPath
讀取配置表
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using System.IO; 5 namespace Commom 6 { 7 ///<summary> 8 ///資源加載管理類 提供Resources加載資源相關(guān)的功能 9 ///</summary>10 public class ResourcesManager11 {12 private static Dictionary<string, string> resMap;13 14 //1.獲取配置文件 形成數(shù)據(jù)結(jié)構(gòu)Dictionary<string,string>15 private static string GetConfigFile()16 {17 string configPath = Application.18 streamingAssetsPath "/ResConfig.txt";19 //當(dāng)前路徑只適應(yīng)于安卓平臺(tái)20 if (Application.platform != RuntimePlatform.Android)21 configPath = "file://" configPath;22 23 WWW www = new WWW(configPath);24 //有可能文件比較大 讀完25 while (true)26 {27 if (www.isDone)28 {29 return www.text;30 }31 }32 }33 //2形成數(shù)據(jù)結(jié)構(gòu)Dictionary<string,string>34 public static void BuildMap()35 {36 string strConfig= GetConfigFile();37 //獲取配置文件38 resMap = new Dictionary<string, string>();39 //字符串讀取器40 StringReader reader= new StringReader(strConfig);41 42 //一行一行讀43 string line = null;44 while ((line=reader.ReadLine())!=null)45 {46 string[] keyvalue = line.Split('=');47 resMap.Add(keyvalue[0], keyvalue[1]);48 }49 //foreach (var item in resMap.Keys)50 //{51 // Debug.Log(resMap[item]);52 //}53 54 }55 static ResourcesManager()56 {57 BuildMap();58 }59 //3.根據(jù)資源名稱 獲取完整路徑.加載資源60 public static T Load<T>(string resName) where T : Object61 {62 //根據(jù)資源名稱 查找路徑63 string path = resMap[resName];64 //加載資源65 return Resources.Load<T>(path);66 }67 }68 }ResourcesManager
WWW 加載資源
從網(wǎng)絡(luò)網(wǎng)址加載資源
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using UnityEngine.UI; 5 6 public class WWWTest : MonoBehaviour 7 { 8 string url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1551776540985&di=fe944512c8b2d0e80313bdc488acc4ac&imgtype=0&src=http://image13.m1905.cn/uploadfile/s2010/0127/20100127083234166.jpg"; 9 10 private void Start()11 {12 StartCoroutine(WWW());13 }14 private IEnumerator WWW()15 {16 WWW www = new WWW(url);17 yield return www; // 等待直至異步下載完成,才繼續(xù)往下執(zhí)行18 if (!string.IsNullOrEmpty(www.error)) //檢測(cè)是否www.有錯(cuò)誤 如果不為空則終止19 {20 yield break;21 }22 if (www.isDone) //檢測(cè)是否加載完成23 {24 transform.Find("RawImage").GetComponent<RawImage>().texture = www.texture;25 }26 }27 }
聯(lián)系客服