电竞比分网-中国电竞赛事及体育赛事平台

分享

Unity和Lua交互

 kiki的號(hào) 2017-02-14

用lua就表示項(xiàng)目用到了熱更新,通常每次熱更新都會(huì)從服務(wù)器獲取最新的lua腳本放到Android/ios設(shè)備的本地目錄下,但是lua應(yīng)該放到哪個(gè)目錄下呢,這里就先說(shuō)說(shuō)lua里面的路徑問(wèn)題


1、不可以放到Resources文件夾下,因?yàn)闊o(wú)法找到其在設(shè)備下的位置,Resources下的東西是由unity來(lái)管理的,使用的時(shí)候通過(guò)Resources.load/loadAll來(lái)加載,而且后綴為lua的文件,無(wú)法通過(guò)Resources來(lái)加載


2、不可以放到StreamingAssets文件夾,因?yàn)樵谠O(shè)備下StreamingAssets文件夾里面的資源只能讀,不能寫(xiě),當(dāng)我們熱更新最新的資源的時(shí)候,是不好操作的!而且StreamingAssets文件夾下的東西最終在生成apk的時(shí)候會(huì)被unity打包進(jìn)一個(gè)叫pkg.apk的apk安裝包里,解壓這個(gè)pkg.apk可以看到StreamingAssets文件夾下的資源,pkg.apk是存在于應(yīng)用的安裝目錄下的,是應(yīng)用的資源文件,unity中設(shè)置應(yīng)用的安裝目錄是由設(shè)置PlayerSettings下的Install Location來(lái)設(shè)置的,Install Location設(shè)置為Perfer External(優(yōu)先安裝到外部設(shè)備,也就是sdcard),安裝此包,用文件查看器查看才能看到此應(yīng)用的安裝目錄(通常在/mnt/asec目錄下),但是沒(méi)有sdcard的手機(jī)貌似即使選項(xiàng)設(shè)置為了Perfer External也是看不到此應(yīng)用的相關(guān)安裝目錄的,通常如下:  


com.zwh.p1是我的包名,安裝目錄的名稱通常是(應(yīng)用的包名-數(shù)字),此安裝目錄默認(rèn)是不能刪除的,如果通過(guò)第三方軟件強(qiáng)制刪除,那么相對(duì)應(yīng)的應(yīng)用就會(huì)再也用不起來(lái)了(應(yīng)用的數(shù)據(jù)文件被破壞),


如果程序就是安裝到外部,那么都是能看到他的安裝目錄的,其他應(yīng)用也是如此:



如果Install Location設(shè)置為Force Internal(強(qiáng)制安裝到手機(jī)內(nèi)存),那么是看不到程序的安裝文件的!


如何訪問(wèn)StreamingAssets文件下的資源:


復(fù)制代碼

        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 
        }

復(fù)制代碼

復(fù)制代碼

WWW www=new WWW("file://c:/a1.lua");

//使用上面的方式加載c盤的lua文件時(shí),是加載不出來(lái)的

WWW www=new WWW("file:///c:/a1.lua");

//加個(gè)斜桿/ 即可!

復(fù)制代碼

當(dāng)我把一個(gè)lua文件放到unity下StreamingAssets文件夾里,然后通過(guò)如上代碼去訪問(wèn)這個(gè)lua文件,打印訪問(wèn)的路徑如下:



路徑 = jar:file:///mnt/asec/com.zwh.p1-1/pkg.apk!/assets/mi.lua


由此可見(jiàn),StreamingAssets文件夾下的資源被打包進(jìn)了pkg.apk這個(gè)安裝包里去了!


3、先看看unity中幾個(gè)路徑有關(guān)的類,在android平臺(tái)輸出的路徑為什么


復(fù)制代碼

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

復(fù)制代碼

可以看出dataPath和streamingAssetsPath指的是程序安裝的位置,而temporaryCachePath和persistentDataPath指的則是sdcard的位置,所以可以選擇這兩個(gè)路徑作為存放lua文件的地方,


前提是unity出包的時(shí)候,要設(shè)置Playersettings下Write Access為External(SDCard),不然這兩個(gè)路徑的位置是不一樣的!


 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多