Unity讀取內部、外部資源詳解

來源:互聯網
上載者:User
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.apkApplication.streamingAssetsPath :  jar:file:///data/app/xxx.xxx.xxx.apk/!/assetsApplication.persistentDataPath :  /data/data/xxx.xxx.xxx/filesApplication.temporaryCachePath :  /data/data/xxx.xxx.xxx/cache

Android這幾個路徑讀取許可權和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是不開啟mipamaps     texture.LoadImage(www.bytes);     //你可以設定一些Texture相關屬性,www載入的texture2d是預設的屬性      texture.wrapMode = TextureWrapMode.Clamp;      www.Dispose();  //中斷連線,如果不斷開的話,下次就會提示還在佔用串連      return texture;}需要注意的就是釋放資源,直接用GameObject.DestroyImmediate(texture)或者GameObject.Destroy(texture),這樣才能卸載掉記憶體,外部資源不是一個Asset,unity不會去幫你管理的,這時需要注意記憶體流失問題。

資源釋放傳送門

個人實踐,如有錯誤歡迎留言交流。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.