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

Wesley13
• 阅读 729

LuaFramework与KBEngine的结合

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

感谢 liuxq 的工作!

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

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

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

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

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

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

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

     public static BindType[] customTypeList =
     {                
         ...
    
         //kbengine
         _GT(typeof(KBEngine.NetworkInterface)),
         _GT(typeof(KBEngine.MemoryStream)),
         _GT(typeof(KBEngine.KBELuaUtil)),
     };
    

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

  2. 在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文件里面可以找到,资源是按照文件夹生成的,如果有其他文件夹,也要一并加入.

  3. 在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");
    
  4. 通过上述设置,Luaframework和kbengine插件的结合就设置完毕了

插件在框架里面的使用

  1. 按照作者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文件里面

  2. 作者的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
    
  3. 增加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,作为一个单例使用这个脚本

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Eclipse插件开发_学习_00_资源帖
一、官方资料 1.eclipseapi(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fhelp.eclipse.org%2Fmars%2Findex.jsp%3Ftopic%3D%252Forg.eclipse.platform.doc.isv%252Fguide%2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这