Unity读取内部、外部资源详解
Unity讀取內部、外部資源詳解
unity讀取資源大概分為兩部分:一部分為內部資源,什么是內部資源,就是導入unity中的資源,我們稱之為Asset,這部分資源unity有現成的管理方法。另外一部分是外部資源,沒有導入unity,也不是打包的AssetBundle資源,比方說就是一個txt、png、lua等資源,需要自己去實現讀取以及資源的管理。下面具體介紹:
內部資源
先說下個平臺路徑問題:
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 可讀可寫dataPath是app程序包安裝路徑,app本身就在這里,此目錄是只讀的。streamingAssetsPath是dataPath下的Raw目錄。
app的獨立數據存儲目錄下有三個文件夾:Documents,Library和tmp。
Documents目錄,存儲需要長期保存的數據,如熱更新內容,iCloud會自動備份此目錄。
Library目錄,這個目錄下有兩個子目錄,Caches和Preferences。
?? ?Caches是一個相對臨時的目錄,適合存放下載緩存的臨時文件,空間不足時可能會被系統清除,Application.temporaryCachePath返回的就是此路徑。我把熱更新 的臨時文件寫在這里,等一個版本的所有內容更新完全后,再把內容轉移到Documents目錄。
??? Preferences用于應用存儲偏好設置,用NSUserDefaults讀取或設置。
tmp目錄,臨時目錄,存放應用運行時臨時使用的數據。
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/cacheAndroid這幾個路徑讀取權限和IOS一樣,需要注意的就是Application.streamingAssetsPath目錄是jar包協議,在unity中需要用www去加載文件,其他的路徑可以直接用文件流去讀取。
Editor
這個就不說了。。。通用的。。。關于資源的釋放問題,已經有小伙伴詳細的解答了,就不啰嗦了,點傳送門。
傳送門
外部資源
再來說說外部資源,外部資源需要遵循ftp 、jar、http、https等協議,具體的拼接需要注意多一個或者少一個“/”的問題,然后用www去加載就行。讀取外部資源大部分用到pc上,android、ios等還是扔到persistentDataPath 路徑里。具體例子如下:
public Texture2D LoadTexture2D(string path) {string dataPath = "file:///" + path; WWW www = new WWW(dataPath);while (!www.isDone) //同步等待,當然你可以采用協程,自己決定就好{}if (www.error != null)return null;Texture2D texture = new Texture2D(4, 4, TextureFormat.ARGB32, false); //初始大小隨便設置,只要大于1就好,false是不開啟mipamapstexture.LoadImage(www.bytes);//你可以設置一些Texture相關屬性,www加載的texture2d是默認的屬性texture.wrapMode = TextureWrapMode.Clamp;www.Dispose(); //斷開連接,如果不斷開的話,下次就會提示還在占用連接return texture; }需要注意的就是釋放資源,直接用GameObject.DestroyImmediate(texture)或者GameObject.Destroy(texture),這樣才能卸載掉內存,外部資源不是一個Asset,unity不會去幫你管理的,這時需要注意內存泄漏問題。資源釋放傳送門
個人實踐,如有錯誤歡迎留言交流。
總結
以上是生活随笔為你收集整理的Unity读取内部、外部资源详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java wsdl xfire_java
- 下一篇: 如何用计算机管理员权限,教你电脑使用代码