1. 程式人生 > >[uLua]關於ulua打包到安卓後無法載入Global的簡易解決方法

[uLua]關於ulua打包到安卓後無法載入Global的簡易解決方法



在這裡我想吐槽ulua自己網站上的(非官方)回答,那根本不能叫回答,說什麼熟悉打包的人都會知道,我只想說既然知道為何不順便科普一下或者拿出解決方案。

下面開始唧唧歪歪,不像麻煩的直接看這裡 

http://pan.baidu.com/s/1kTP9sTD   使用前記得先gen lua wrap file

實際上熟悉Unity的人確實會知道是怎麼回事,但是就算知道解決起來不簡單很方便。

這裡說明一下原因和思路,簡單來說Unity只會打包已經被引用的東西,然而ulua的腳步顯然是沒有被任何東西引用,你程式碼的路徑看起來是引用了但是Unity還沒有智慧到那個程度,Unity的一個解決方案就是StreamingAssets目錄,這個目錄下的東西會無條件打包,想必這點大部分人也都知道了。但是如果放在這個目錄ulua的LuaScriptMgr將無法識別,其實如果看過ulua 的SimpleFramework就會發現其實改下目錄就好

在Util類裡改

 public static string LuaPath(string name) {
        //修改為預設使用streamingAssetsPath,不管是編輯器還是真機都方便除錯
        string path = Application.streamingAssetsPath;
        string lowerName = name.ToLower();
        if (lowerName.EndsWith(".lua")) {
            int index = name.LastIndexOf('.');
            name = name.Substring(0, index);
        }
        name = name.Replace('.', '/');
        return path + "/lua/" + name + ".lua";
    }

於是又引來新的問題就是需要自己拷指令碼過去,為了自動一些我修改了bindwrap的程式碼

var targetPath = Application.streamingAssetsPath + "/lua";
        var uluaPath = Application.dataPath + "/ulua/lua";
        if (!Directory.Exists(targetPath)) {
            if(!Directory.Exists(Application.streamingAssetsPath))
                Directory.CreateDirectory(Application.streamingAssetsPath);
            FileUtil.CopyFileOrDirectory(uluaPath, targetPath);
        } else {
            FileUtil.ReplaceFile(uluaPath + "/system/wrap.lua", targetPath + "/System/Wrap.lua");
        }

具體新增地方自己從前面提供的連結下載去看,知道原理的不用說也知道新增在哪了

然後以上改造是不夠的,當打包成apk,一樣是無法載入,因為StreamingAssets會被打包成一個apk,而原版ulua都是用File進行讀取,apk實際上是一個zip檔案,所以讀不到。所以有些方案是把指令碼都打包成zip,然後再考到persistentDataPath目錄解壓後使用,看起來挺簡單實際操作仍然麻煩,需要引入第三方zip庫,需要實現解壓或者直接zip讀取,而我個人從簡單實現的角度,直接使用的方法是用WWW讀取StreamingAssets。

由於ulua通過實現一個Loader來讀取檔案,所以只需要修改這個Loader即可

        string lowerName = name.ToLower();
        if (lowerName.EndsWith(".lua")) {
            int index = name.LastIndexOf('.');
            name = name.Substring(0, index);
        }
        var path = Application.persistentDataPath + "/" + name+".lua";
        if (File.Exists(path)) {
            str = File.ReadAllBytes(path);
        } else {
            path = Util.LuaPath(name);
            if (path.Contains("://")) {//用於判斷是否有打包
                var www = new WWW(path);
                while (!www.isDone) ;
                if (!string.IsNullOrEmpty(www.error))
                    UnityEngine.Debug.LogError("Loader:" + www.error);
                else
                    str = www.bytes;
            } else {

                if (File.Exists(path)) {
                    str = File.ReadAllBytes(path);
                }
            }
        }
這裡可以做很多靈活性修改,但是出於不過度實現,我只實現了我需要的功能,我感覺應該足夠了,就算你想玩出更多花樣,簡單修改一下就可以

總結一下

1 Unity的指令碼打包問題,用StreamingAssets解決

2 StreamingAssets的讀取問題,用www解決

3 ulua路徑問題,修改Loader可以解決所有路徑問題,可以自己實現各種路徑的包含,或者使用lua內建的路徑方案,也需要配合loader

另外我這個只是一種簡陋解決辦法,不喜勿槽,畢竟ulua官方估計也是覺得沒有什麼固定方案就交給了開發者,對於一些入門或者圖快捷的開發者不算友好

相關推薦

uLua關於ulua打包無法載入Global簡易解決方法

在這裡我想吐槽ulua自己網站上的(非官方)回答,那根本不能叫回答,說什麼熟悉打包的人都會知道,我只想說既然知道為何不順便科普一下或者拿出解決方案。 下面開始唧唧歪歪,不像麻煩的直接看這裡  http://pan.baidu.com/s/1kTP9sTD   使用前記得

UnityAndroid()程式碼APK時,使用系統安裝器安裝的最正確辦法(不彈出選擇開啟的程式)

關於這個辦法的搜尋,又是隻能找到一篇被到處轉又沒卵用的文章,我時相當氣憤的。經過Google大法,最終找到正確的開啟方式 先來看看錯誤的開啟方式 String str = "/CanavaCancel.apk"; String fileName = Environ

開發常見錯誤原因及解決方法

做安卓開發一年半了,遇到過不少的問題,其中有些花了不少時間才得到解決,有些至今不知為何,也請高人指點迷津,為我撥雲見日~~有錯誤也多多包涵,幫我糾正~~ 1.更換安卓專案的庫檔案(即使庫檔案程

應用安裝錯誤:INSTALL_FAILED_MEDIA_UNAVAILABLE 解決方法

今天工作中,在測試一臺機子的時候,海信的手機,安裝自己的產品怎麼都裝不上去,然後在網上找了好多方法,現在整理一下: 方法一: 這個問題的原因為Android應用安裝位置當前不可用。而Android應用安裝位置有手機rom內和sdcard兩種。由於Android裝置沒有

Dialog設定背景透明無效,在5.0系統上無效解決方法

困擾了大半天的一個問題,寫一個關閉按鈕突出的dialog,在eclipse上面寫的Demo,然後執行在魅族,紅米,華為手機上都沒問題,都能正常的突出按鈕(其中魅族手機和華為手機都是5.0以上的系統),

記一次Unable to Merge dex的解決方法

最近課設用安卓寫,遇到了一個bug,花了差不多兩個小時才解決。這是一個安卓執行時的異常,多半是第三方包重複引入而引發的異常。 在網上找了好久,都沒發現解決方法。然後衝著死馬當活馬醫的想法,把衝突的第三方包全刪了。它竟然好了! 在project下找到衝突的包,點開然

使手機支援ipv6的終極解決方法

使安卓手機支援ipv6的終極方法 2015年3月29日 | 分類: 網路技術  測試日期:2015年3月29日 測試環境:安卓4.2 需要軟體: 1,用於管理:smanager   (script manager) 2,用於編輯:Smeditor  (script manager a

SQLServer 數據庫變成單個用戶無法訪問問題的解決方法

master alt arch pre server tab process sele processes USE master; GO DECLARE @SQL VARCHAR(MAX); SET @SQL=‘‘ SELECT @SQL=@SQL+‘;

SQLServer 資料庫變成單個使用者無法訪問問題的解決方法

USE master; GO DECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @[email protected]+'; KILL '+RTRIM(SPID) FROM master..sysprocesses WHERE dbid=DB_ID('資料庫名

WordPress修改主題無法正常顯示頁面解決方法

下午看到一個挺漂亮的主題,下載來想試用下看看效果,結果卻導致我的前臺頁面無法正常顯示,成白板兒了,這下鬱悶了,難道又要折騰了,悲劇,不過想起來WP的所有配置相關的東西全存在資料庫裡,去資料庫裡改了主題不就行了嗎?絕佳的好辦法。從空間後臺進入phpMyAdmin,開啟wp_options表(注意:你的表格名稱字

關於Windows10+Ubuntu18.04 雙系統安裝無法啟動Ubuntu的解決方法

小白用了一天的時間裝Ubuntu,安裝成功之後出現了不能識別Grub啟動Ubuntu,直接進入Windows系統的情況。由於網上大多數教程都是解決無法啟動Windows的問題,所以把不能啟動Ubuntu的解決方法彙總一下,希望可以幫到和我遇到同樣問題的小白OwO安裝過程就不詳

ubantu16.04TLS fcitx和搜狗拼音安裝無法正常啟動的解決方法

在網上有很多關於fcitx和搜狗的安裝的帖子和處理無法啟動的方法。不過很可惜,可能是本人運氣不好,嘗試了能找到的方法均已失敗告終。經過自己的多次嘗試和對網上找到的方法的總結找到了一種可行的解決方法。(本方法不需要用到終端,也不需要敲程式碼,屬於通俗易懂新手教程) 首先在Ub

一臺主機利用apache伺服器開啟虛擬主機無法使用www域名解決方法

同一臺主機一般只有一個域名,為了能放置許多不同型別的網站,需要將主機配置成虛擬主機來使用,配置的方法很多,詳細的過程可以參照網上其他部落格等,這裡強調apache的conf檔案的兩個重要的地方: 1.

Linux--忘記MySQL密碼的解決方法和輸入mysqld_safe --skip-grant-tables &無法進入MySQL的解決方法

在Linux下忘記MySQL密碼後我們可以通過一個mysql的引數–skip-grant-tables &輕鬆解決這個問題 親測在CentOS有效 其中 --skip-grant-tables 的意思是跳過授權表,通過此引數來跳過輸入密碼,後面跟得 &a

$.ajax返回的JSON格式的資料無法執行success的解決方法

近段時間做專案,在專案使用了ajax技術,遇到了一個奇怪的問題:"$.ajax返回的JSON格式的資料無法執行success",程式碼是這樣寫的: 1 $.ajax({ 2 .. 3 dataType:'json', 4 ... 5 success:f

安裝centos無法獲取IP的解決方法

好多時候,在虛擬機器中安裝完後,進去centos中,使用ifconfig發現沒有此命令,可使用ip a檢視IP, 如果沒有ip,一般centos預設安裝不啟用網絡卡,解決辦法: CentOS配置網絡卡開機自動獲取IP地址 開啟 /etc/sysconfig/netw

Windows10訪問磁碟被拒絕怎麼辦 升級win10無法訪問磁碟的解決方法

近期,有使用者反饋自己在將win7系統升級到win10正式版後,開啟本地磁碟時,出現了“無法訪問 D:\。拒絕訪問”的提示。而在使用win10磁碟管理器檢視後發現數據都還存在,容量也正常,可是就是無法訪問。這該怎麼辦呢?接下來,小編就向大家分享升級win10後無法訪問磁

Jenkins打包時提示沒同意constraintLayout的license的解決方法

失敗 studio 使用 you 安裝目錄 目錄 nbsp cnblogs bin文件 使用Jenkins打包安卓項目時,報錯並失敗,錯誤信息: You have not accepted the license agreements of the following

【Unity】打包APK常見問題

pos 記得 () dex text player call ces efault 問題:unity error invalid command android 原因:Android版本較新,Unity版本太舊(如4.X),Unity打包APK時調用Android工具使用的

HBuilder工作筆記001---HBuilder打包和ios應用

     JAVA技術交流QQ群:170933152  我打包的時候報這個錯誤: 這裡的證書需要用蘋果賬號,在中國蘋果網站上,進行申請,稽核,生成,就可以了,但是生成的時候,聽同事說,需要繫結 手機的唯一標識,也就是說,哪個