2020年11月10日 星期二

Android Unity - Code injection

之前的篇章有提到Unity程式碼的修改,不過僅限於修改已存在的程式碼,這樣靈活性就會非常的差,因為如果要增加自己的程式碼到Unity裡面,以現行的做法是行不通的,接下來要介紹如何在Unity程式碼裡面,插入一段自己的程式碼,來改變程式運行的結果


一、找出關鍵程式碼區塊

這次的範例沿用之前的小遊戲,一樣是讓遊戲的子彈無限輸出。



我們一樣在assets\bin\Data\Managed目錄裡找到Assembly-CSharp.dll的檔案,不過這次並不是修改裡面的程式碼,而是注入程式碼(Code injection)。



這邊是原始的程式碼, 其中--this.shotTime是遞減、++this.shooted是遞增,如果this.shooted到達3,怪物沒完全消滅,遊戲就會失敗並且結束,那麼接下來我們就來透過程式碼注入(Code injection)改變遊戲的勝負條件。



二、程式碼注入(Code injection)

我們在原本的程式碼下方,注入我們的程式碼(++this.shotTime、--this.shooted),這樣就能完美的抵消this.shotTime的遞減和this.shooted的遞增,一樣能讓子彈無限輸出。



三、運行結果

程式碼注入(Code injection)到Unity程式碼後,重新封裝apk檔案,並且安裝到手機裡面,我們也能跟修改程式碼一樣的效果,而且又比較靈活,不會局限於現有的程式碼。