使用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;
}
}
這裏實現了整體簡單的框架。