003,LuaFramework集成KBEngine的lua客户端插件

LuaFramework与KBEngine的结合

KBEngine的lua代码使用 liuxqlua插件,作者已经把与LuaFramework的结合弄好了,也可以看作者的demo,这里只是记录本人的使用过程

感谢 liuxq 的工作!

插件分为两个部分,C#代码部分和Lua代码部分

把C#部分的代码放到框架的Scripts目录里面,我是放到了Scripts/KBEngine目录里面

把Lua部分的代码放到框架的Lua目录里面,我是放到了Lua/KBEngine/Base目录里面

代码放好以后,需要在框架里面添加一些设置代码

  1. 在CustomSettings.cs文件里面,customTypeList数字里面增加如果内容

    1 public static BindType[] customTypeList = 2 { 3 ... 4 5 //kbengine 6 _GT(typeof(KBEngine.NetworkInterface)), 7 _GT(typeof(KBEngine.MemoryStream)), 8 _GT(typeof(KBEngine.KBELuaUtil)), 9 };

    kbengine需要导出上面三个类的LuaBinder

  2. 在LuaManager.cs文件里面,InitLuaBundle函数里面添加如下代码

    1 void InitLuaBundle() { 2 if (loader.beZip) { 3 ... 4 5 //加入kbengine的资源 6 loader.AddBundle("lua/lua_kbengine.unity3d"); 7 loader.AddBundle("lua/lua_kbengine_base.unity3d"); 8 loader.AddBundle("lua/lua_kbengine_interface.unity3d"); 9 } 10 }

    加入的文件是框架生成的资源,在StreamingAssets/lua文件里面可以找到,资源是按照文件夹生成的,如果有其他文件夹,也要一并加入.

  3. 在LuaManager.cs文件里面,Awake函数里面添加如下代码

    1 void Awake() { 2 ... 3 4 //这里要设置KBEngine的CallFunction 5 //不然KBEngine没有办法调用lua脚本 6 KBEngine.KBELuaUtil.SetCallLuaFunction(this.CallFunction); 7 }

    kbengine的C#部分和Lua部分的交换就是通过KBELuaUtil完成,通过KBELuaUtil的CallMethod函数调用kbengine的lua代码 例如:

     KBELuaUtil.CallMethod("KBEngineLua", "InitEngine");
    
  4. 通过上述设置,Luaframework和kbengine插件的结合就设置完毕了

插件在框架里面的使用

  1. 按照作者demo里面的使用方法,在框架的GameManager.cs文件里面,OnInitialize函数里面添加KBEngine的初始化

    1 void OnInitialize() 2 { 3 ... 4 5 _kbeMain = gameObject.GetComponent<KBEMain>(); 6 if (null == _kbeMain) 7 { 8 _kbeMain = gameObject.AddComponent<KBEMain>(); 9 } 10 _kbeMain.initKBEngine(); 11 12 ... 13 }

    initKBEngine里面调用KBEngineLua的InitEngine方法完成初始化

    1 public virtual void initKBEngine() 2 { 3 ... 4 5 KBELuaUtil.CallMethod("KBEngineLua", "InitEngine"); 6 }

    KBEngineLua的InitEngine在KBEngine.lua文件里面

  2. 作者的demo里面,服务器IP和端口是在KBEngine.lua里面设置的,为了方便调试,在KBEMain.cs里面增加IP和端口的设置

    1 public class KBEMain : MonoBehaviour 2 { 3 public enum Server 4 { 5 Test, 6 Remote, 7 Local, 8 } 9 10 //登录服务器 11 public Server IP = Server.Test; 12 public int port = 20013; 13 14 ... 15 16 public virtual void initKBEngine() 17 { 18 ... 19 20 //把服务器IP和端口记录到Lua脚本里面 21 KBELuaUtil.CallMethod("KBEngineLua", "InitServer", _ip, string.Format("{0}", port)); 22 23 KBELuaUtil.CallMethod("KBEngineLua", "InitEngine"); 24 } 25 26 .... 27 }

    KBEngine.lua里面增加InitServer函数,设置服务器IP和端口

    1 --初始化服务器地址 2 KBEngineLua.InitServer = function(strIP, strPort) 3 this.ip = strIP; 4 this.port = strPort; 5 end
  3. 增加KBEScript.lua文件处理各种事件

    1 require("KBEngine/Account") 2 require("KBEngine/Player") 3 4 local Event = require("KBEngine/Base/events") 5 6 KBEngineLua.KBEScript = {} 7 8 function KBEngineLua.KBEScript:New(script) 9 script = script or {} 10 setmetatable(script, self) 11 self.__index = self 12 return script 13 end 14 15 --[[ 16 --初始化函数,注册事件 17 --]] 18 function KBEngineLua.KBEScript:Init() 19 Event.AddListener("onLoginFailed", KBEngineLua.KBEScript.OnLoginFailed) 20 Event.AddListener("OnLoginSuccessfully", KBEngineLua.KBEScript.OnLoginSuccessfully) 21 Event.AddListener("onEnterWorld", KBEngineLua.KBEScript.OnEnterWorld) 22 Event.AddListener("onLeaveWorld", KBEngineLua.KBEScript.OnLeaveWorld) 23 Event.AddListener("addSpaceGeometryMapping", KBEngineLua.KBEScript.OnAddSpaceGeometryMapping) 24 end 25 26 --[[ 27 -- 28 --]] 29 function KBEngineLua.KBEScript:OnAddSpaceGeometryMapping(path) 30 print("KBEScript:OnAddSpaceGeometryMapping", path) 31 end 32 33 --[[ 34 --角色离开场景 35 --]] 36 function KBEngineLua.KBEScript:OnLeaveWorld(obj) 37 print("KBEScript:OnLeaveWorld", obj) 38 end 39 40 --[[ 41 --角色进入场景 42 --]] 43 function KBEngineLua.KBEScript:OnEnterWorld(obj) 44 print("KBEScript:OnEnterWorld", obj) 45 end 46 47 --[[ 48 --登录成功,由Account在初始化完成后发送 49 --]] 50 function KBEngineLua.KBEScript:OnLoginSuccessfully() 51 print("KBEScript:OnLoginSuccessfully") 52 local account = KBEngineLua.player() 53 account:ReqPlayerInfos("1") 54 end 55 56 --[[ 57 --登录失败 58 --]] 59 function KBEngineLua.KBEScript:OnLoginFailed() 60 print("KBEScript:OnLoginFailed") 61 end 62 63 --[[ 64 --创建一个实例,相当于单例模式 65 --]] 66 KBEScriptInst = KBEngineLua.KBEScript:New() 67 KBEScriptInst.Init() 68 return KBEScriptInst

    最后返回KBEScriptInst,作为一个单例使用这个脚本

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0