目录

客户端编程概述

CBE引擎针对客户端的开发,我们提供了完善的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页面都可以支持。

虽然CBE引擎是服务器引擎,但基于这些客户端引擎的功能特性,使得我们引擎可以在如此多的终端平台上展现它极致的能力:

SDK介绍:

SDK中,把CBE引擎提供给客户端的接口、事件、数据结构等功能与内容,完全提炼出来。作为客户端开发者,可以非常方便的把CBE引擎作为服务端使用。

1.初始化引擎(以Unity中的SDK为例)

如下图:

1

Hierarchy下新建一个GameObject,我们命名成kbe_clientapp

1

给它上一个组件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后,会导致老版本的客户端的通讯会出现问题。至此,CBE引擎为了保证一致性,也提供了版本匹配的方法。在客户端编程时,在登录请求发起前做好事件注册,并进行合适的处理即可解决这一问题。

引擎提供:

  1. 客户端版本与服务器版本不一致;
  2. 客户端脚本版本和服务器脚本版本不一致,这两种版本匹配。
//调用该方法注册从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...
}

CBE引擎不仅提供了简单又完善的SDK,还提供了如SDK生成器、策划数据导出工具(json格式)等工具,这一切都为了方便开发者进行内容的开发。

SDK生成器:

就像上面的例子所示,引擎提供的SDK生成器会自动根据引擎开发过程中涉及的通讯协议、数据结构、Entity实体定义等方面与客户端SDK进行一一对应。使得客户端开发时保持与服务端的一致性。

如上面例子中AVATAR_INFOAVATAR_INFO_LIST都是在服务端定义的自定义数据结构,SDK中也能完美的还原出来。包括Entity定义时,所有和客户端相关的方法、属性(暴露给客户端的方法和客户端暴露给服务端的方法)都一一对应了起来!

这就是SDK生成器强大的作用之所在!

策划数据的前后端共用

策划一般在做数据时都是通过EXCEL进行的,而客户端编程中不会直接使用EXCEL(因解析时需要引入第三方库,不但包体容量增加,而且解析效率底下),一般使用JSON、CSV、XML作为数据的持久化文件格式。在《策划工具-xlsx2py》一文中有对该工具的介绍,它可以用一份EXCEL生成既可以给服务端用的PY文件,也可以生成给客户端用的JSON文件。


在下面的章节中会对客户端编程–《SDK自动生成》,点我进入下一节


Copyright © 2018 Yolo Technologies. Publication: 2.0-025. Built: 2018-12-07.