UE4/5 C++网络服务器编程纪录【零】--准备篇

时间:2022-02-02 01:19:30

前言

之前利用业余时间重新复习UE4/5的C++开发,闲来无事做了个基于独立服务器的多人在线(目前限定客户数量是20人以内)DEMO,核心功能在我之前发的B站视频里面有,战斗、动作、交互以及场景演示都有了,有朋友看了视频之后要求我写文档复现,我也顺便纪录一下需要做的工作。方便以后自己遇到相关业务场景进行回顾知识点,顺便分享给各位朋友。

视频指路1-整点小活儿: 整点小活儿

视频指路2-研发中天气场景切换: 研发中天气场景切换

视频指路3-简单的敌人AI功能: 简单的敌人AI功能

准备工作:

游戏服务器:UE5游戏服务器应用 UE5.1

数据库服务器:mysql-8.0.32

服务器操作系统:Linux Ubuntu18.0LTS

WEB服务器:利用UE5进行集成,处理工作在游戏服务器内部完成

客户端:UE5开发完成的客户端

框架设计:

基于UE5的独立服务器功能开发的C/S框架,基本原理就是客户端只负责发起功能请求和渲染展示,游戏服务器负责进行运算数据同步、坐标信息同步、加密保护等功能。数据库服务器用于存储客户数据,客户行为模型,客户标签等功能。WEB服务器处理一部分WEB请求,并提供一切WEB能处理的功能。

重点!!!!

所有的操作和运算都在游戏服务器完成,不允许在客户端进行数值运算和用户数据更新!客户端只能渲染画面和进行数据同步。

服务器开发基础入门参考文档:UE5设置专用服务器

mysql数据库服务器开发基础安装参考文档:mysql官方安装包

一、下载UE5源码

GITHUB源码包:虚幻引擎官方GITHUB

小技巧:在下载完成的安装包Setup.bat里面修改如下配置,能够发动多线程下载,提升某些不可描述原因引起的1兆不到的网速。

set PROMPT_ARGUMENT=set PROMPT_ARGUMENT=--prompt --threads=30 --exclude=VS2012 --exclude=VS2013 --exclude=VS2017 --exclude=HTML5

然后再在hosts里添加unreal的CDN代理

13.226.17.97 cdn.unrealengine.com

通过一系列操作,可以提升在SetUp.bat完整拉取虚幻引擎的速度,但是因为某些不可描述的原因不会提升很高,总比28kb/s好

安装完成后利用VisualStudio打开UE5.sln看到如下图所示

UE4/5 C++网络服务器编程纪录【零】--准备篇

二、安装MySql

基本需要的引擎已经安装好了,需要安装数据库服务器,我这里使用的是Mysql-8.0.32

安装步骤参考另一位大神的文档:MySQL安装配置教程(超级详细、保姆级)

这个过程中因为Windows10的部分管理员权限问题,导致mysqld初始化安装失败。

我们需要在C:\Windows\System32里面用管理员身份打开cmd命令行,然后使用如下命令进入mysql安装包,不能用简单的cd命令操作,要加上/d

cd /d H:\mysql-8.0.32-winx64\bin
UE4/5 C++网络服务器编程纪录【零】--准备篇

最后结果如图

UE4/5 C++网络服务器编程纪录【零】--准备篇

其他的参考大神的mysql安装步骤解决就行了。

三、安装DBeaver

开启了mysql服务之后,不习惯命令行操作的朋友可以利用DBeaver进行数据库内容管理操作,和同事讨论了用轻量级的navicat,总感觉差点意思,毕竟现在是做大数据的,要集成很多jdbc功能,用DBeaver更合适我,所以就安装了。

DBeaver下载地址:DBeaver官方下载链接

安装完成之后直接链接本地Mysql服务,如图所示

UE4/5 C++网络服务器编程纪录【零】--准备篇

前期的准备工作就已经完成了,我们编译一下UE5的源码,弄个基于官方第三人称模板开发的DEMO,包含登录功能、登录服务器关卡等功能的DEMO看一下。

四、准备工作完成进行简单的DEMO

(1)设置UE5引擎编辑器为启动项目

选择engine->UE5,设为启动项目

UE4/5 C++网络服务器编程纪录【零】--准备篇

选择debug editor,点击生成。根据机器配置不同,生成新的项目时间为几个小时到几天不等(实在太大了,狂吃我机器性能)

UE4/5 C++网络服务器编程纪录【零】--准备篇

(2)生成项目的同时不能闲着,创建用户信息数据库,并进行数据插入

create database game_users;
create table if not exists game_users.user_base_info(
`id` INT  NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_name` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '用户名',
`pass_word` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '用户密码',
`user_state` int  NOT NULL DEFAULT 0 COMMENT '用户状态,0:不可用,1:可用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`)
)ENGINE = INNODB charset = utf8mb4 COMMENT '用户信息表';

建表完成插入测试语句,如图所示

insert into game_users.user_base_info (user_name,pass_word,user_state) values ('demo1','demo1',1);
UE4/5 C++网络服务器编程纪录【零】--准备篇

到此为止,基础的测试数据执行完成,数据准备工作就绪。