用lua就表示項目用到了熱更新,通常每次熱更新都會從服務器獲取最新的lua腳本放到Android/ios設備的本地目錄下,但是lua應該放到哪個目錄下呢,這里就先說說lua里面的路徑問題 1、不可以放到Resources文件夾下,因為無法找到其在設備下的位置,Resources下的東西是由unity來管理的,使用的時候通過Resources.load/loadAll來加載,而且后綴為lua的文件,無法通過Resources來加載 2、不可以放到StreamingAssets文件夾,因為在設備下StreamingAssets文件夾里面的資源只能讀,不能寫,當我們熱更新最新的資源的時候,是不好操作的!而且StreamingAssets文件夾下的東西最終在生成apk的時候會被unity打包進一個叫pkg.apk的apk安裝包里,解壓這個pkg.apk可以看到StreamingAssets文件夾下的資源,pkg.apk是存在于應用的安裝目錄下的,是應用的資源文件,unity中設置應用的安裝目錄是由設置PlayerSettings下的Install Location來設置的,Install Location設置為Perfer External(優(yōu)先安裝到外部設備,也就是sdcard),安裝此包,用文件查看器查看才能看到此應用的安裝目錄(通常在/mnt/asec目錄下),但是沒有sdcard的手機貌似即使選項設置為了Perfer External也是看不到此應用的相關安裝目錄的,通常如下: com.zwh.p1是我的包名,安裝目錄的名稱通常是(應用的包名-數字),此安裝目錄默認是不能刪除的,如果通過第三方軟件強制刪除,那么相對應的應用就會再也用不起來了(應用的數據文件被破壞), 如果程序就是安裝到外部,那么都是能看到他的安裝目錄的,其他應用也是如此: 如果Install Location設置為Force Internal(強制安裝到手機內存),那么是看不到程序的安裝文件的! 如何訪問StreamingAssets文件下的資源: string GetStreamingAssetsPath() { return #if UNITY_ANDROID //"jar:file://" + Application.dataPath + "!/assets/"; UnityEngine.Application.streamingAssetsPath+"/"; #elif UNITY_IPHONE Application.dataPath + "/Raw/"; #elif UNITY_STANDALONE_WIN || UNITY_EDITOR "file://" + Application.dataPath + "/StreamingAssets/"; #else string.Empty; #endif } WWW www=new WWW("file://c:/a1.lua"); //使用上面的方式加載c盤的lua文件時,是加載不出來的 WWW www=new WWW("file:///c:/a1.lua"); //加個斜桿/ 即可! 當我把一個lua文件放到unity下StreamingAssets文件夾里,然后通過如上代碼去訪問這個lua文件,打印訪問的路徑如下: 路徑 = jar:file:///mnt/asec/com.zwh.p1-1/pkg.apk!/assets/mi.lua 由此可見,StreamingAssets文件夾下的資源被打包進了pkg.apk這個安裝包里去了! 3、先看看unity中幾個路徑有關的類,在android平臺輸出的路徑為什么 Debug.Log ("temporaryCachePath = " + UnityEngine.Application.temporaryCachePath); //temporaryCachePath = /storage/sdcard0/Android/data/com.zwh.p1/cache Debug.Log ("dataPath = " + UnityEngine.Application.dataPath); //dataPath = /mnt/asec/com.zwh.p1-2/pkg.apk Debug.Log ("persistentDataPath = " + UnityEngine.Application.persistentDataPath); //persistentDataPath = /storage/sdcard0/Android/data/com.zwh.p1/files Debug.Log ("streamingAssetsPath = " + UnityEngine.Application.streamingAssetsPath); //streamingAssetsPath = jar:file:///mnt/asec/com.zwh.p1-2/pkg.apk!/assets 可以看出dataPath和streamingAssetsPath指的是程序安裝的位置,而temporaryCachePath和persistentDataPath指的則是sdcard的位置,所以可以選擇這兩個路徑作為存放lua文件的地方, 前提是unity出包的時候,要設置Playersettings下Write Access為External(SDCard),不然這兩個路徑的位置是不一樣的!
|
|