您的位置:首页 > 编程语言 > Lua

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

2018-04-11 09:58 399 查看

LuaFramework与KBEngine的结合

KBEngine的lua代码使用 liuxqlua插件,作者已经把与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,作为一个单例使用这个脚本
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息