Unity手游漢化筆記⑥:Mono腳本后端,修改代碼中的字符串


總的筆記:https://www.cnblogs.com/guobaoxu/p/12055930.html


 

  在漢化過程中,不可避免的,會遇到要修改代碼中字符串的情況,而Android端的代碼有兩種腳本后端,Mono和il2cpp,本文針對Mono來講。首先比較基本的,Mono腳本后端會把代碼編譯進DLL里,然后放在assets\bin\Data\Managed文件夾下,在沒有其他安全措施的情況下,我們可以直接用dnSpy來處理

  dnSpy:https://github.com/0xd4d/dnSpy

  一個開源工具,主要用於C#代碼的逆向,目前已經支持直接編輯DLL中的代碼

下面開始介紹具體過程:

一、樣例

  一個簡易的樣例,頁面上一個UI/Text,綁定一個腳本,腳本代碼如下

1 public class MyScript : MonoBehaviour
2 {
3     void Start()
4     {
5         var text = gameObject.GetComponent<Text>();
6         text.text = "my string";
7     }
8 }

運行效果如下:

 

二、修改

  因為我們不考慮其他安全措施,所以對apk的處理就簡單粗暴一下,直接用解壓軟件打開,把assets\bin\Data\Managed文件夾整個拖出來,可以看到他的內容如下:

 

一般來說,開發者開發的代碼在Assembly-CSharp.dll中,但是還是要把整個文件夾拖出來,因為會有引用關系的。把所有的DLL都放進dnSpy里,我的Demo很簡單,所以直接展開Assembly-CSharp.dll的話,就可以直接看到反編譯后的代碼了,效果如下:

 

  可以看到和源碼甚至相差無幾,直接在方法內的代碼處右鍵,這里右鍵菜單里有兩個“編輯函數”,齒輪的那個是方法的一些屬性用的,我們用【另一個】,在彈出的編輯框里直接改代碼就好了,和正向開發中的一樣,然后點擊右下角【編譯】按鈕。

  然后要保存回DLL,菜單欄-文件-保存模塊,確定。

  最后壓回apk,因為DEMO沒有安全措施,所以直接壓縮后就可以安裝了,運行起來,效果如下:

 

三、補充

  Demo因為太簡單了,直接展開Assembly-CSharp.dll就找到了要修改的類,但是實際上遇到的游戲都不會這么簡單,所以搜索上也是一個麻煩的事情,dnSpy中按Ctrl+Shift+K,可以彈出搜索框,類型選擇【數字/字符串】,范圍選【所選文件】,可以很快搜索到。

  可以看到,如果沒有安全措施,用的又是Mono后端,那么你的代碼可以說是基本裸奔的狀態,要修改簡直易如反掌,所以Mono腳本后端現在多被用在開發過程中快速迭代使用,而不用於最終上線版本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM