Unity3D研究院之Android同步方法讀取streamingAssets


版本Unity5.3.3

Android 小米pad1

首先非常感謝 @守着陽光 同學在下面的留言。讓我解決了一個大的謎團。。

 

開始我知道 StreamingAssets 路徑是這個 path = “jar:file://” + Application.dataPath + “!/assets/”;

文檔在這里: http://docs.unity3d.com/Manual/StreamingAssets.html

后來我知道了一個新API Application.streamingAssetsPath

Application.streamingAssetsPath 其實就等於 “jar:file://” + Application.dataPath + “!/assets/”;

然而問題就出現在這個路徑上。我打印了一下LOG

Application.streamingAssetsPath = jar:file:///data/app/com.xxx.xxx-1.apk!/assets

Application.dataPath+”!assets” = /data/app/com.xxx.xxx-1.apk!assets

也就是說Application.streamingAssetsPath  多了一個   jar:file://

那么如果想在Android上同步方法AssetBundle.LoadFromFile 就得用 Application.dataPath+”!assets”這個路徑。

從此這段代碼就正常了。

Unity的坑啊~ 55555555555555555555

還有這個路徑只能用來AssetBundle.LoadFromFile 。如果想用File類操作。 比如File.ReadAllText  或者 File.Exists  Directory.Exists 這樣都是不行的。

———————————-!!從今天以后下面的代碼已經可以作廢了!!—————————

streamingAssets 這個目錄在IOS下是可以同步讀取的,但是在Android下必須用www來異步讀取。。這就很惡心了~所以最近我就在想辦法如何能在Android下也能同步讀取。如下圖所示,我把一個sprite打成assetbundle並且放在StreamingAssets目錄下。

Unity3D研究院之Android同步方法讀取streamingAssets(八十八) - 雨松MOMO程序研究院 - 1

assetbundle的壓縮格式 ,我使用的是unity5.x的lz4方式。

然后創建一個3D Sprite 在Hierarchy里 試圖把這個ab里的sprite加載上去。

然后,把unity導出成android工程。。

Unity3D研究院之Android同步方法讀取streamingAssets(八十八) - 雨松MOMO程序研究院 - 2

用eclipse打開剛剛導出的工程。找到UnityPlayerActivity.java類 添加如下代碼

 

OK 大功告成, 我的sprite已經可以同步加載了。

如下圖所示,那么實際上unity把已經把streamingAssets目錄下的資源放在了android的assets目錄下。

Unity3D研究院之Android同步方法讀取streamingAssets(八十八) - 雨松MOMO程序研究院 - 3

 

那么我們同步加載的原理也是利用Android的AssetManager這個類來讀取的。

剛和同事討論了一下,如果有效率的問題,我們可以在ndk里讀取assets下的資源。 比如向這樣~  c#  調用  ndk 讀取完直接返回給c# 這樣就可以不通過java這一層。。

http://www.cppblog.com/johndragon/archive/2012/12/28/196754.html

最后希望大家可以幫忙多多測試看看,謝謝啦~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM