Unity SLua 如何調用Unity中C#方法
阿新 • • 發佈:2017-05-09
都差不多 public title 接口 如何
1.原理
就是通常在Lua框架中所說的,開放一個C#的web接口,或者叫做在Slua框架中註冊函數。
2.作用
在Lua中調用C#中的方法,這個是在做熱更新中很常用的一種方法,無論是slua,還是lua,都差不多、這裏,我拿slua舉例。
3.實際運用 舉例:如何在Slua中打印Log
原理:其實是slua通過調用C#中的Debug.Log方法實現的打印,並不是說是lua中的打印方法起到作用。
步驟:
首先,既然是Lua調用C#中的方法,這裏自定義寫一個打印log的方法。
12345678910111213141516171819202122232425262728 | public class CDebug { /// <summary> /// lua中打印Log /// </summary> /// <param name="title">標題</param> /// <param name="contents">內容</param> public static void Log( string title, string contents) { int level = 3; //這裏代碼不需要解釋把,如果對顏色有需求,可以自己稍微修改一下。 switch (level) { case 1: Debug.Log(contents); break ; case 2: Debug.LogWarning(title+ ":" + contents); break ; case 3: Debug.LogError(title + ":" + contents); break ; default : Debug.Log(contents); break ; } } } |
I:
註意圖中 標紅。一般每個lua框架中,都會有這麽個註冊函數,加了這個註冊函數。才會,有下面那步。執行。
II:
點擊 Slua->Custom->Make
之後,發現編譯之後,多一個:
III:
註意:之後我們可以看到多了一個腳本,用svn版本控制,對比一下文件,其實還是有其他地方改動的。
會發現BindCustom文件中的代碼變成了
12345678910111213 | public class BindCustom { public static Action<intptr>[] GetBindList() { Action<intptr>[] list= { Lua_CDebug.reg, //這是自動生成的,多附加的 // 因為之前我們看到CustomExport腳本中的OnAddCustomClass方法中 //很多方法是被註釋了,所以,需要手動把之前生成過的文件加上,具體看 //SVN版本控制對比一下BundCustom腳本,需要把之前生成過的代碼 //手動加上。 //附加:這個不是什麽BUG,因為別人以為所有需要在Lua中調用C#的代碼都附加好了, //所以,不需要了,假如我們的項目需要上線,也需要還原Log方法,因為他會打包到 //apk包中的. </intptr></intptr> |
這樣一個調用C#中的方法的功能做完了,其他的類似的,仿照這個例子就可以。
Unity SLua 如何調用Unity中C#方法