003,LuaFramework集成KBEngine的lua客户端插件
2018-04-11 09:58
399 查看
LuaFramework与KBEngine的结合
KBEngine的lua代码使用 liuxq 的 lua插件,作者已经把与LuaFramework的结合弄好了,也可以看作者的demo,这里只是记录本人的使用过程
感谢 liuxq 的工作!
插件分为两个部分,C#代码部分和Lua代码部分把C#部分的代码放到框架的Scripts目录里面,我是放到了Scripts/KBEngine目录里面
把Lua部分的代码放到框架的Lua目录里面,我是放到了Lua/KBEngine/Base目录里面
代码放好以后,需要在框架里面添加一些设置代码
在CustomSettings.cs文件里面,customTypeList数字里面增加如果内容public static BindType[] customTypeList = { ... //kbengine _GT(typeof(KBEngine.NetworkInterface)), _GT(typeof(KBEngine.MemoryStream)), _GT(typeof(KBEngine.KBELuaUtil)), };
kbengine需要导出上面三个类的LuaBinder
在LuaManager.cs文件里面,InitLuaBundle函数里面添加如下代码
void InitLuaBundle() { if (loader.beZip) { ... //加入kbengine的资源 loader.AddBundle("lua/lua_kbengine.unity3d"); loader.AddBundle("lua/lua_kbengine_base.unity3d"); loader.AddBundle("lua/lua_kbengine_interface.unity3d"); } }
加入的文件是框架生成的资源,在StreamingAssets/lua文件里面可以找到,资源是按照文件夹生成的,如果有其他文件夹,也要一并加入.
在LuaManager.cs文件里面,Awake函数里面添加如下代码
void Awake() { ... //这里要设置KBEngine的CallFunction //不然KBEngine没有办法调用lua脚本 KBEngine.KBELuaUtil.SetCallLuaFunction(this.CallFunction); }
kbengine的C#部分和Lua部分的交换就是通过KBELuaUtil完成,通过KBELuaUtil的CallMethod函数调用kbengine的lua代码
例如:
KBELuaUtil.CallMethod("KBEngineLua", "InitEngine");
通过上述设置,Luaframework和kbengine插件的结合就设置完毕了
插件在框架里面的使用
按照作者demo里面的使用方法,在框架的GameManager.cs文件里面,OnInitialize函数里面添加KBEngine的初始化void OnInitialize() { ... _kbeMain = gameObject.GetComponent<KBEMain>(); if (null == _kbeMain) { _kbeMain = gameObject.AddComponent<KBEMain>(); } _kbeMain.initKBEngine(); ... }
initKBEngine里面调用KBEngineLua的InitEngine方法完成初始化
public virtual void initKBEngine() { ... KBELuaUtil.CallMethod("KBEngineLua", "InitEngine"); }
KBEngineLua的InitEngine在KBEngine.lua文件里面
作者的demo里面,服务器IP和端口是在KBEngine.lua里面设置的,为了方便调试,在KBEMain.cs里面增加IP和端口的设置
public class KBEMain : MonoBehaviour { public enum Server { Test, Remote, Local, } //登录服务器 public Server IP = Server.Test; public int port = 20013; ... public virtual void initKBEngine() { ... //把服务器IP和端口记录到Lua脚本里面 KBELuaUtil.CallMethod("KBEngineLua", "InitServer", _ip, string.Format("{0}", port)); KBELuaUtil.CallMethod("KBEngineLua", "InitEngine"); } .... }
KBEngine.lua里面增加InitServer函数,设置服务器IP和端口
--初始化服务器地址 KBEngineLua.InitServer = function(strIP, strPort) this.ip = strIP; this.port = strPort; end
增加KBEScript.lua文件处理各种事件
require("KBEngine/Account") require("KBEngine/Player") local Event = require("KBEngine/Base/events") KBEngineLua.KBEScript = {} function KBEngineLua.KBEScript:New(script) script = script or {} setmetatable(script, self) self.__index = self return script end --[[ --初始化函数,注册事件 --]] function KBEngineLua.KBEScript:Init() Event.AddListener("onLoginFailed", KBEngineLua.KBEScript.OnLoginFailed) Event.AddListener("OnLoginSuccessfully", KBEngineLua.KBEScript.OnLoginSuccessfully) Event.AddListener("onEnterWorld", KBEngineLua.KBEScript.OnEnterWorld) Event.AddListener("onLeaveWorld", KBEngineLua.KBEScript.OnLeaveWorld) Event.AddListener("addSpaceGeometryMapping", KBEngineLua.KBEScript.OnAddSpaceGeometryMapping) end --[[ -- --]] function KBEngineLua.KBEScript:OnAddSpaceGeometryMapping(path) print("KBEScript:OnAddSpaceGeometryMapping", path) end --[[ --角色离开场景 --]] function KBEngineLua.KBEScript:OnLeaveWorld(obj) print("KBEScript:OnLeaveWorld", obj) end --[[ --角色进入场景 --]] function KBEngineLua.KBEScript:OnEnterWorld(obj) print("KBEScript:OnEnterWorld", obj) end --[[ --登录成功,由Account在初始化完成后发送 --]] function KBEngineLua.KBEScript:OnLoginSuccessfully() print("KBEScript:OnLoginSuccessfully") local account = KBEngineLua.player() account:ReqPlayerInfos("1") end --[[ --登录失败 --]] function KBEngineLua.KBEScript:OnLoginFailed() print("KBEScript:OnLoginFailed") end --[[ --创建一个实例,相当于单例模式 --]] KBEScriptInst = KBEngineLua.KBEScript:New() KBEScriptInst.Init() return KBEScriptInst
最后返回KBEScriptInst,作为一个单例使用这个脚本
相关文章推荐
- 【wireshark】插件开发(四):Lua插件Post-dissector和Listener
- Wireshark自定义协议RPUDPDL(UDP下载)插件 (lua版)
- Bootstrap3.3.7全面解读和Bootstrap4.0全面分析----------003(JavaScript插件的使用)
- sublime text2的cocos2dx-lua插件安装
- 分享一个jQuery的自动客户端本地保存插件Sisyphus.js - 帮助你自动保存用户输入内容
- Eclipse的SVN插件与SVN客户端安装版本一致性,实现版本协同管理
- 使用lua脚本编写wireshark协议插件
- 手动使用C/C++编写Lua扩展插件
- 在Eclipse中安装SVN客户端插件并提交到SVN服务器上
- mstsc.exe的小插件 隐藏客户端计算机名
- 新闻客户端——MyHttpUtils框架及其GsonFormat插件
- unity热更新(一)导入Xlua插件
- 如何在Myeclipse下安装和使用svn客户端插件
- BadeLua插件熟悉
- 判断客户端浏览器是否安装了Flash插件的多种方法
- 解决Xen App 6 下载客户端插件会链接到citrix 官网问题
- openresty利用插件lua-resty-moongoo操作mongodb
- 在Eclipse中使用Axis2插件WSDL生成Web Service服务端/客户端
- 使用Eclipse自带的Axis1插件生成Web Service服务端客户端
- 详解如何使用jquery插件jQuery.Validate实现客户端验证