🗃️ 概述
KBE引擎针对客户端的开发,我们提供了完善的SDK,客户端开发者所要做的就是接收事件数据,然后完成渲染即可。
SDK可支持市面上较常用的几款客户端引擎,其中包括:
Ogre:一款非常流行的开源的图像渲染引擎,常用于游戏、虚拟现实、教育等行业。https://www.ogre3d.org/
Unity3d:是一款强大的综合性游戏开发引擎,使用Unity可以构建高质量3D和2D游戏、建筑可视化、实时三维动画等,并支持跨平台。https://unity3d.com
UnrealEngine:虚幻引擎,是一款具有强大画面渲染的游戏引擎,可支持各大主流平台。https://www.unrealengine.com
Cocos2dx:是一款开源并支持跨平台的免费的移动2D游戏引擎。http://www.cocos.com
基于HTML5的引擎:所有基于H5的引擎或纯H5页面都可以支持。
虽然KBE引擎是服务器引擎,但基于这些客户端引擎的功能特性,使得我们引擎可以在如此多的终端平台上展现它极致的能力:
SDK介绍:
SDK中,把KBE引擎提供给客户端的接口、事件、数据结构等功能与内容,完全提炼出来。作为客户端开发者,可以非常方便的把KBE引擎作为服务端使用。
1.初始化引擎(以Unity中的SDK为例)
如下图:
在 Hierarchy
下新建一个GameObject
,我们命名成kbe_clientapp
。

给它上一个组件 clientapp
,在运行时,就可以初始化引擎啦。
2.登录服务器
在UI层,合适的地方调用如下代码,即可请求登录服务器。
KBEngine.Event.fireIn("login", account, password, datas);
其中account
是账户名,password
是密码,datas
是一个byte[]
,可以在登录时发送自定义的数据给服务器。
3.Account实体被激活
如果登录成功,默认的,Account实体会被激活,开发者就可以在该实体中和服务器进行账户相关的通讯和操作了。
假设服务端的Account实体的def配置文件如下(关于def配置,请参见《Entity之def配置文件》一文):
<BaseMethods>
<!-- 暴露给客户端的请求角色列表接口 -->
<reqAvatarList>
<Exposed/>
</reqAvatarList>
<!-- 暴露给客户端的请求创建角色接口 -->
<reqCreateAvatar>
<Exposed/>
<!-- roleType -->
<Arg> UINT8 </Arg>
<!-- name -->
<Arg> UNICODE </Arg>
</reqCreateAvatar>
</BaseMethods>
<!-- 客户端远程方法 -->
<ClientMethods>
<!-- 请求avatar列表后,返回给客户端 -->
<onReqAvatarList>
<!--返回的角色列表-->
<Arg> AVATAR_INFO_LIST</Arg>
</onReqAvatarList>
<!-- 请求创建avatar后,成功的回调 -->
<onCreateAvatarSuccess>
<!-- 创建出的角色信息 -->
<Arg> AVATAR_INFO </Arg>
</onCreateAvatarSuccess>
<!-- 请求创建avatar后,失败的结果 -->
<onCreateAvatarFailed>
<!--错误代码-->
<Arg> INT8 </Arg>
</onCreateAvatarFailed>
</ClientMethods>
我们可以通过SDK自动生成的代码,向服务器发出这些请求,并从服务器返回回调。SDK自动生成器已经根据服务端的配置文件,把通讯的接口帮开发者完成了,只需直接调用即可。
3.1 向服务器请求-获取角色列表
//在Account类中直接调用,即可发出请求 baseEntityCall.reqAvatarList();
完成了请求角色列表的请求发出。
3.2 服务器回调-获取角色列表的结果
在Account类中,重写回调函数即可。
public override void onReqAvatarList(AVATAR_INFO_LIST list) { //do something with list }
根据def配置,客户端sdk会生成onReqAvatarList(AVATAR_INFO_LIST list)
的抽象函数,并由Account这个继承类进行重写即可。在该方法体内处理服务器返回的结果。
3.3 向服务器请求-创建一个角色
//在Account类中直接调用,即可发出请求 baseEntityCall.reqCreateAvatar(roleType, name);
根据def配置,是需要传入一个uint8的角色类型id和一个角色名字name的字符串,这些在C#中已经帮助开发者进行了方法申明。
3.4 服务器回调-创建角色的结果
在Account类中,重写对应回调函数即可。
public override void onCreateAvatarSuccess(AVATAR_INFO info) { //do something with info } public override void onCreateAvatarFailed(sbyte errorCode) { //do something with errorCode }
非常方便吧?调用方法和实现回调的抽象函数,就可以完成和服务端的双向通讯!
4.版本检测
针对上线后的产品,客户端的版本是无法保证的,当服务端开发的版本已经increase后,会导致老版本的客户端的通讯会出现问题。至此,KBE引擎为了保证一致性,也提供了版本匹配的方法。在客户端编程时,在登录请求发起前做好事件注册,并进行合适的处理即可解决这一问题。
引擎提供:
- 客户端版本与服务器版本不一致;
- 客户端脚本版本和服务器脚本版本不一致,这两种版本匹配。
//调用该方法注册从sdk内部激发出来的消息。
void Init() {
KBEngine.Event.registerOut("onVersionNotMatch", this, "onVersionNotMatch");
KBEngine.Event.registerOut("onScriptVersionNotMatch", this, "onScriptVersionNotMatch");
}
public void onVersionNotMatch(string verInfo, string serverVerInfo) {
//do something if not match...
}
public void onScriptVersionNotMatch(string verInfo, string serverVerInfo) {
//do something if not match...
}
KBE引擎不仅提供了简单又完善的SDK,还提供了如SDK生成器、策划数据导出工具(json格式)等工具,这一切都为了方便开发者进行内容的开发。
SDK生成器:
就像上面的例子所示,引擎提供的SDK生成器会自动根据引擎开发过程中涉及的通讯协议、数据结构、Entity实体定义等方面与客户端SDK进行一一对应。使得客户端开发时保持与服务端的一致性。
如上面例子中AVATAR_INFO
、AVATAR_INFO_LIST
都是在服务端定义的自定义数据结构,SDK中也能完美的还原出来。包括Entity定义时,所有和客户端相关的方法、属性(暴露给客户端的方法和客户端暴露给服务端的方法)都一一对应了起来!
这就是SDK生成器强大的作用之所在!
策划数据的前后端共用
策划一般在做数据时都是通过EXCEL进行的,而客户端编程中不会直接使用EXCEL(因解析时需要引入第三方库,不但包体容量增加,而且解析效率底下),一般使用JSON、CSV、XML作为数据的持久化文件格式。在《策划工具-xlsx2py》一文中有对该工具的介绍,它可以用一份EXCEL生成既可以给服务端用的PY文件,也可以生成给客户端用的JSON文件。