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

Wesley13
• 阅读 376

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,作为一个单例使用这个脚本

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。 1、使用解构获取json数据let jsonData   id: 1, status: "OK", data: ['a', 'b'] ; let  id, status, data: number   jsonData; console.log(id, status, number )
blmius blmius
1年前
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:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
Wesley13 Wesley13
1年前
Java爬虫之JSoup使用教程
title: Java爬虫之JSoup使用教程 date: 2018-12-24 8:00:00 +0800 update: 2018-12-24 8:00:00 +0800 author: me cover: [https://img-blog.csdnimg.cn/20181224144920712](https://www.oschin
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序 select * from table_name order id desc; 2.按照指定(多个)字段排序 select * from table_name order id desc,status desc; 3.按照指定字段和规则排序 selec
Stella981 Stella981
1年前
Angular material mat
Icon Icon Name mat-icon code _add\_comment_ add comment icon <mat-icon> add\_comment</mat-icon> _attach\_file_ attach file icon <mat-icon> attach\_file</mat-icon> _attach\
Stella981 Stella981
1年前
Eclipse插件开发_学习_00_资源帖
一、官方资料 ------  1.[eclipse api](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fhelp.eclipse.org%2Fmars%2Findex.jsp%3Ftopic%3D%252Forg.eclipse.platform.doc.isv%252Fguide%2
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
3A网络 3A网络
2个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
# 理解 virt、res、shr 之间的关系(linux 系统篇) **前言** 想必在 linux 上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题 —— 你的程序在运行时占用了多少内存(物理内存)? 通常我们可以通过 t
helloworld_34035044 helloworld_34035044
4个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。 uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid() 或 uuid(sep)参数说明:sep 布尔值,生成的uuid中是否包含分隔符'',缺省为
3A网络 3A网络
2个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
# 开发一个不需要重写成 Hive QL 的大数据 SQL 引擎 学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。 各种知识表象看杂乱无章,若只是学习