原創不易,轉發請注明出處!謝謝~
幾個重要目錄的平臺差異
-
Application.dataPath (Read Only)
-
Application.streamingAssetsPath (Read Only)

-
Application.persistentDataPath (Read/Write)

Unity android 目錄結構(參考)

Unity iOS 目錄結構(參考)

目錄在平臺差異下的使用要點
-
異步使用
android平臺,當傳遞給UnityWebRequest使用目錄的時候:
包內檔案目錄需要前綴:jar:file://
包外檔案目錄需要前綴 : file://
ios/win/mac平臺,當傳遞給UnityWebRequest使用目錄的時候:
包內檔案目錄需要前綴:file://
包外檔案目錄需要前綴: file://
android平臺包內檔案有特殊前綴jar android平臺下,使用Application.streamingAssetsPath獲取的目錄前面已經帶了jar:file://,所以可以直接給UnityWebRequest使用,
-
同步使用
- android平臺,包內檔案的同步讀取需要使用native java代碼實作,包外檔案的同步讀取可以使用System.File
- 其他平臺,包內和包外的檔案,同步讀取都可以使用 System.File
Android平臺下使用native java實作檔案的同步讀取要點
1. 使用Android Studio 或者 IntelliJ IDEA 工具創建 Android Library Module
2. 創建一個Java類,比如 AssetUtil
3. 在 AssetUtil 類中使用 AssetManager 來讀取包內的檔案
Activity activity = (Activity)Class.forName("com.unity3d.player.UnityPlayer").getField("currentActivity").get(null);
AssetManager assetManager = activity.getAssets();
// 只需要使用static函式即可
public static byte[] read(String file){
InputStream stream = assetManager.open(file);
int length = stream.available();
byte[] data = new byte[length];
stream.read(data);
stream.close();
return data;
}
4. 編譯Module,會得到一個 classes.jar,改成你需要的名字,放到unity的plugin目錄下面
5. 在c#端使用代碼即可同步讀取
// 注意,這里傳過去的path是相對于 !/assets 的,也就是相對于根目錄(Application.streamingAssetsPath)
using (var aam = new AndroidJavaClass(AndroidAssetClassName))
{
var allBytes = aam.CallStatic<byte[]>("read", path);
return Encoding.UTF8.GetString(allBytes);
}
Addressable中的目錄使用要點
- catalog.json和settings.json存盤在 aa 目錄
- 第一次打包資源的時候,如果要把Remote bundle檔案(可遠程更新的)同步放到程式包里面的做法:
- 把散列的bundle檔案通過zip壓縮成一個檔案放到 streamingAssetsPath 目錄下面
- 程式第一運行的時候,解壓zip到 persistentDataPath
- Local bundle資源會存盤在 aa/iOS 或者 aa/android 目錄
- 資源熱更新的時候使用 Addressables.DownloadDependenciesAsync 會把Remote bundle資源下載到 /UnityCache/Shared 目錄
- 資源Load的程序:根據catalog.json里面標記的資源的地址,如果是本地的,從 iOS 目錄找;如果是遠程的,先從 UnityCache/Shared 里面找,沒有就下載到 UnityCache/Shared 里面
ICSharpCode.SharpZipLib使用
這個檔案在unity的安裝目錄:Unity.app/Contents/MonoBleedingEdge/lib/mono/unityjit
注意要在unityjit這個目錄下面找,如果要支持其他語言/資料庫等,一并拷貝I18開頭的dll到你游戲工程的plugins目錄
如果這篇文章能夠幫助到有需要的人,點贊收藏超過100,會出一個帶全部代碼的實體教程,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/319859.html
標籤:其他
