引言:

如何为你的游戏加入房间系统,可以进行加入、创建、搜索、销毁等功能?这段时间一直在查找相关的资料并不断进行各种测试,最终选择了配合UE4原生的DS服务器做房间系统。提到房间功能首先想到的是UE4的“Session”节点,使用“Create Session”等节点可以快速在局域网内搭建自己的房间系统,但是如果需要接入网络的话就比较麻烦,无论是选择“Online Subsystem Steam”还是选择“epic onLine Server”都是比较有难度的,当然后者应该是最优选择,它们内部都集成了房间、匹配、语音等比较完善的功能。我这边选择DS服务器采用“创建进程”方式来做房间系统,原因就是比较简单,对于新手来说是比较容易理解和入门的。下面主要记录一下开发房间系统的一些过程。

DS服务器 DS服务器是UE4的专属服务器,服务器代码和游戏逻辑代码是写到一块的,关于如何打包DS服务器可以参考UE官方文档“(设置专属服务器)。 https://docs.unrealengine.com/4.27/zh-CN/InteractiveExperiences/Networking/HowTo/DedicatedServers/

每启动一次DS服务器就相当于开启一个新的进程,也可以理解为创建了一个房间,那么我们可以通过启动多个DS服务器来做房间系统,客户端可以通过IP和端口号来加入DS服务器,也就是房间,端口号是自动分配的,我们需要手动指定,并不能和其它进程的端口重复即可。那么思路就明确了,在点击创建房间按钮的时候,需要启动一个DS服务器程序,并在代码中指定好端口,点击加入房间的时候,使用IP和端口号进入房间。退出房间就销毁进程。

启动本地可执行程序 那么我们如何通过代码来启动外部程序呢?这里提供两种方式,第一种就是使用C标准库<stdlib.h>中的system()函数执行命令,和在CMD命令行中执行命令相似,执行结果如图1-1所示。参考链接如下。 https://www.runoob.com/cprogramming/c-function-system.html

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <stdio.h>
#include <string.h>
#include<stdlib.h>

int main ()
{
char command[50];

strcpy( command, "ls -l" );
system(command);

return(0);
}

还有一种方式是使用UE4原生模块“runtime”中的一个函数“FPlatformProcess::CreateProc()”,使用方法如下代码所示, #include"../Runtime/Core/Public/GenericPlatform/GenericPlatformProcess.h"

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
void AMyProject2Character::TestOpenExe(FString URL, FString Params)
{
Handle_ = FPlatformProcess::CreateProc(*URL, *Params, true, false, false, nullptr, 0, nullptr, nullptr);

//Handle_ = &currHandle;
//FPlatformProcess::
UE_LOG(LogTemp, Warning, TEXT("URL:::%s"), *URL);
}
void AMyProject2Character::TestCloseExe()
{
//FProcHandle currHandle = FPlatformProcess::CreateProc(*URL, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
if (Handle_.IsValid())
{
FPlatformProcess::TerminateProc(Handle_);
Handle_.Reset();
}
//FPlatformProcess::CloseProc(*Handle_);
}

使用方法如下图所示,URL就是程序的路径,Param是参数,可以不填,我们这边需要指定地图,即创建房间前需要选择地图。指定启动方式,开始测试时可以log模式启动。最后需要指定端口号。 ue_ds_image2

参考链接

https://blog.csdn.net/qq_31930499/article/details/88561678 https://zhuanlan.zhihu.com/p/162910207 https://www.lanindex.com/ue4-shootergame-standalone-dedicated-serverwindows-linux/ UE4 ShooterGame 项目源码分析 - Session的创建和加入: rhttps://blog.csdn.net/weixin_43405546/article/details/96163243?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.nonecaseGam rhttps://blog.csdn.net/weixin_43405546/article/details/96163243?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.nonecaseGam