在线信标(2/7)
实现在线信标
本节包含一个在线信标的示例实现,用于计算服务器-客户端ping的往返时间(RTT)。往返时间是指数据包从客户端发送到服务器,再返回客户端所需的时间。本示例只是一个小型实现,仅仅简单介绍了在线信标的功能,但其目的是提供一个可用的示例,帮助你上手测试信标以外功能的实现,并解释如何在Gameplay代码中设置在线信标。
本在线信标示例由C++和蓝图共同实现,利用UE的反射系统函数元数据说明符和类元数据说明符进行远程程序调用,并将特定函数公开给蓝图可视化脚本。
要使用虚幻引擎的在线信标执行ping程序,请执行以下步骤:
- 创建或打开虚幻引擎C++项目。
- 使用C++类向导创建三个新的C++ 类: - 从
OnlineBeaconClient派生的名为PingClient的类。 - 从OnlineBeaconHost派生的名为PingHost的类。 - 从OnlineBeaconHostObject派生的名为PingHostObject的类。 - 将Ping信标代码小节的代码添加到相应的头文件和源文件中: - Ping客户端代码 - Ping主机代码 - Ping主机对象代码
- 将以下函数添加到你项目的游戏模式文件:
Header
public:
bool InitPingBeacon();
Copy full snippet
public: bool InitPingBeacon();
Source
bool ABeaconsGameMode::InitPingBeacon()
{
ENetMode Mode = GetNetMode();
if (Mode == NM_DedicatedServer || Mode == NM_ListenServer)
{
APingHost* Host = GetWorld()->SpawnActor(APingHost::StaticClass());
if (Host && Host->InitializeHost())
{
APingHostObject* HostObject = GetWorld()->SpawnActor(APingHostObject::StaticClass());
if (HostObject)
{
Host->RegisterHostObject(HostObject);
return true;
}
}
}
return false;
}
Copy full snippet
bool ABeaconsGameMode::InitPingBeacon() { ENetMode Mode = GetNetMode(); if (Mode == NM_DedicatedServer || Mode == NM_ListenServer) { APingHost Host = GetWorld()->SpawnActor<APingHost>(APingHost::StaticClass()); if (Host && Host->InitializeHost()) { APingHostObject HostObject = GetWorld()->SpawnActor<APingHostObject>(APingHostObject::StaticClass()); if (HostObject) { Host->RegisterHostObject(HostObject); return true; } } } return false; }
- 在你游戏模式的
BeginPlay函数中调用InitPingBeacon。 - 在你项目的
DefaultEngine.ini文件中添加引擎配置小节中的配置,由此确保已将项目配置为使用在线信标。
