1、添加xLua
-
在GitHub中下載騰訊xLua的最新版本
-
把Asset文件夾下的四個文件和Tools文件夾添加到項目中
-
在項目的Player Setting中添加宏 HOTFIX_ENABLE
-
把Unity安裝目錄下的3個dll文件加入剛才導入項目的xLua中
導入dll文件
F:\Unity\Editor\Data\Managed
Unity.Cecil.dll
Unity.Cecil.Mdb.dll
Unity.Cecil.Pdb.dll
導入到
\Asset\XLua\Src\Editor\ -
點擊左上角Generate Code + Hotfix Inject In E 注入代碼
如果成功顯示:
則說明添加成功
2、注意事項
-
在修改了任何一處C#代碼,都需要重新注入代碼。更改lua文件代碼則不需要。
-
在發布游戲時要把xLua自帶的Example例子刪除,然后 Clear+GC+HIIE 重新注入代碼
3、我遇見的一些坑即解決方法
-
lua虛擬機的初始化和打補丁要放在Awake函數中,不然可能補丁無效。
-
通過 xlua.hotfix(class, method, func) 注入代碼,也要通過 xlua.hotfix(class, method, nil) 再刪除掉。
注意要在lua虛擬機釋放之前完成(釋放方法在OnDestroy中,則刪除方法可以放在OnDestroy周期前面的OnDisable中)。 -
lua代碼沒有問題,但在打包AssetBundles的時候報錯:
Assets/XLua/Gen/UnityEngineLightWrap.cs(614,59): error CS1061: Type `UnityEngine.Light' does not contain a definition for `lightmapBakeType' and no extension method `lightmapBakeType' of type `UnityEngine.Light' could be found. Are you missing an assembly reference?
解決:找到xLua文件里的 ExampleGenConfig.cs 文件
把代碼:
new List<string>(){"UnityEngine.Light", "lightmapBakeType"},
添加到黑名單中
效果如圖:
- 自定義loader從本地加載文件時是使用utf8讀取的,所以要注意文本的編碼格式要為utf8,不然可能出問題。
System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));