使用KBEngine开发UE4服务端——开发详解
1. 简述
开始正式进入开发,网络上关于开发和修改文件的文章较少,这里会记录自己开发过程中需要更改的地方和一些流程。
2. 前期的配置说明
根据前文配置过后,在kbengine文件夹下,双击new_assets.bat生成一个新的资产库作为这里开发使用的资产库,生成的文件夹名字随意。
这里更改KBE提供默认的Account, 在{项目资产库}/res/server/kbengine.xml中:
添加:
<accountEntityScriptType>Consumer</accountEntityScriptType>
如下图所示:
在/scripts/entities.xml里修改Account为Consumer如下:
<!-- <Avatar/> -->
<Consumer hasClient="true"></Consumer><!-- <Account hasCell="true" hasBase="true" hasClient="true"></Account> -->
</root>
删除/scripts/entity_defs/Account.def
并新建/scripts/entity_defs/Consumer.def
内容如下:
<root>
<Properties>
</Properties>
<BaseMethods>
<say>
<Exposed/>
<!--say的内容-->
<Arg> UNICODE </Arg>
</say>
</BaseMethods>
<CellMethods>
</CellMethods>
<ClientMethods>
<onSay> <!--回调函数,接受传出去的say-->
<Arg> UNICODE </Arg>
</onSay>
</ClientMethods>
</root>
删除/scripts/base/Account.py
并新建/scripts/base/Consumer.py
内容如下:
# -*- coding: utf-8 -*-
import KBEngine
from KBEDebug import *
class Consumer(KBEngine.Proxy):
def __init__(self):
KBEngine.Proxy.__init__(self)
def Say(self,Msg):
"""
被客户端调用说话方法
:param Msg:说话内容
"""
DEBUG_MSG("Consumer[%i] Say %s" %(self.id,Msg))
BackMsg = Msg + "服务端发送"
self.clients.OnSay(BackMsg)
这里我们对源文件进行了更新,怎么更新自己的UE4工程使其生效呢呢?很简单,
- 先关闭VS工程,
- 在你的UE4工程目录\Plugins\kbengine_ue4_plugins\Source\KBEnginePlugins下删除Engine文件夹
- 在你的资产库下双击gensdk.bat,生成新的kbengine_ue4_plugins。
- 把kbengine_ue4_plugins下\Source\KBEnginePlugins\Engine文件夹复制过去
- 右键uproject工程,重新生成你的VS代码即可!
- 打开你的工程,是否发现原先Account文件不见了,多了自己新添加的
在工程文件\Plugins\kbengine_ue4_plugins\Source\KBEnginePlugins\Scripts下新建2个Consumer.cpp Consumer.h,并在VS工程中添加,
//Consumer.cpp
#include "Consumer.h"
#include "Engine/Entity.h"
#include "Engine/KBEngine.h"
#include "Engine/KBDebug.h"
#include "LogicEvents.h"
KBEngine::Consumer::Consumer() :
ConsumerBase()
{
}
KBEngine::Consumer::~Consumer()
{
}
void KBEngine::Consumer::__init__()
{
}
void KBEngine::Consumer::onDestroy()
{
// 注销该对象注册的所有事件
KBENGINE_DEREGISTER_ALL_EVENT();
}
void KBEngine::Consumer::OnSay(const FString & arg1)
{
}
//Consumer.h
#pragma once
#include "Engine/KBECommon.h"
#include "Engine/ConsumerBase.h"
namespace KBEngine
{
class Consumer : public ConsumerBase
{
public:
Consumer();
virtual ~Consumer();
public:
virtual void __init__() override;
virtual void onDestroy() override;
virtual void OnSay(const FString& arg1) override;
}
}
这里实现了整体简单的框架。