我是靠谱客的博主 贪玩月亮,最近开发中收集的这篇文章主要介绍003,LuaFramework集成KBEngine的lua客户端插件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

LuaFramework与KBEngine的结合

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

感谢 liuxq 的工作!

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

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

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

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

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

转载于:https://my.oschina.net/jacky0525/blog/1793738

最后

以上就是贪玩月亮为你收集整理的003,LuaFramework集成KBEngine的lua客户端插件的全部内容,希望文章能够帮你解决003,LuaFramework集成KBEngine的lua客户端插件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部