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

前言

之前利用业余时间重新复习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看到如下图所示

二、安装MySql

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

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

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

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

cd /d H:\mysql-8.0.32-winx64\bin

最后结果如图

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

三、安装DBeaver

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

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

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

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

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

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

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

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

(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);

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/3512.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring容器实现原理-Spring的结构组成与核心类

Spring容器基本用法 bean是Spring中最核心的东西,因为Spring就像是个大水桶,而bean就像是容器中的水,水桶脱离了水便没有什么用处了,让我们先看看bean的定义: /*** ClassName MyTestBean* Author jiaxinxiao* Date 2…

2021全球开放数据应用创新大赛-法律咨询问答亚军方案

赛题分析 任务:给定用户问题,根据多个候选答案生成回复,属于文本生成任务。 问题信用逾期了,银行打电话骚扰我父母,改如何处理候选答案1. 按照约定还款 2.报警标准回复你好,这种情况只能按照约定还款&…

Python 练习 六

1、(最大数的出现)编写程序读取整数,找出它们中的最大值,然后计算它的出现次数。假设输入以数字0结束。假设你输入的是“352555 0";程序找出的最大数是5,而5的出现次数是4。(提示:维护两个变量max和 count。变量max存储的是当前最大数,而…

CentOS 7安装redis6.2.6(包括服务开机自启和开放端口)

CentOS 7安装redis6.2.61. 官网下载redis文件2. 校验安装依赖2.1 安装系统默认版本gcc2.2 升级gcc版本3. 解压编译安装4. 修改配置redis.conf4.2 设置密码4.3 绑定ip(可选)5. 启动redis服务并测试5.2 测试安装是否成功5.3 redis开机自启配置6.开放防火墙…

QT表格控件实例(Table Widget 、Table View)

欢迎小伙伴的点评✨✨,相互学习🚀🚀🚀 博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀 文章目录前言一、图示实例二、列…

art 虚拟机相关

​​​​​​​虚拟机中对象锁实现分析 Android 库加载命名空间 https://source.android.google.cn/docs/core/architecture/vndk/linker-namespace Android共享库命名空间-CSDN博客 编译 prebuilts/clang/host/linux-x86/clang-r450784d/bin/llvm-addr2line -f -C -e…

项目文章 | 缓解高胆固醇血症 ,浒苔多糖如何相助?

文章标题:Polysaccharides from Enteromorpha prolifera alleviate hypercholesterolemia via modulating the gut microbiota and bile acid metabolism 发表期刊:Food & Function 影响因子:6.317 作者单位:福建医科大…

关于Docker逃逸

关于Docker逃逸 文章目录关于Docker逃逸前言一、判断是否为docker容器?二、privileged特权模式启动容器逃逸三、 Docker Remote API未授权访问逃逸四、危险挂载导致Docker逃逸五、危险挂载Docker Socket逃逸六、 挂载宿主机procfs逃逸七、脏牛漏洞来进行docker逃逸八…

蓝桥杯C/C++VIP试题每日一练之矩形面积交

💛作者主页:静Yu 🧡简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者 💛社区地址:前端知识交流社区 🧡博主的个人博客:静Yu的个人博客 🧡博主的个人笔记本:前端面试题 个人笔记本只记录前端领域的面试题目,项目总结,面试技…

Qt容器学习

Qt容器Qt容器主要优点就是在所有的平台上的运行都表现的一致,并且它们都是隐含共享的.Qt容器的另外一个主要特征就是易于使用的迭代器类,它们可以利用QDataStream变成数据流,而且他们通常可以使用执行文件中的代码量比相应的STL类中的要少.最后Qt/Embedd…

动态规划---线性dp和区间dp

动态规划(三) 目录动态规划(三)一:线性DP1.数字三角形1.1数字三角形题目1.2代码思路1.3代码实现(正序and倒序)2.最长上升子序列2.1最长上升子序列题目2.2代码思路2.3代码实现3.最长公共子序列3.1最长公共子序列题目3.2代码思路3.3代码实现4.石子合并4.1题目如下4.2代…

论文解读:Less is More: Learning Highlight Detection from Video Duration

引言 高亮检测有可能极大地简化视频浏览,但现有的方法往往受到昂贵的监督要求的影响,人类观众必须手动识别训练视频中的高亮部分。我们提出了一种可扩展的无监督解决方案,利用视频时长作为隐式监督信号。我们的关键见解是,来自较…

【lwIP(第三章)】内存管理

目录一、内存管理简介二、lwIP内存堆和内存池应用三、lwIP内存堆简介1. First Fit算法2. lwIP内存堆原理解析2.1 mem_init程序解析2.2 mem_malloc程序解析2.3 mem_free程序解析四、lwIP内存池简介1. 实现lwIP内存池的文件2. lwIP内存池函数2.1 memp_init()2.2 memp_malloc()2.3…

数据迁移工具

1.Kettle Kettle是一款国外开源的ETL工具,纯Java编写,绿色无需安装,数据抽取高效稳定 (数据迁移工具)。 Kettle 中有两种脚本文件,transformation 和 job,transformation 完成针对数据的基础转换,job 则完成整个工作流的控制。 Kettle 中文名称叫水壶,该项目的主程序…

SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】

文章目录前言1、分布式情况下如何加锁2、具体实现过程3、测试3.1 一个服务按照多个端口同时启动3.2 使用jmeter进行压测前言 上一篇实现了单体应用下如何上锁,这一篇主要说明如何在分布式场景下上锁 上一篇地址:加锁 1、分布式情况下如何加锁 需要注意的点是: 在上锁和释放…

Android开发-Android UI与布局

01 Android UI 1.1 UI 用户界面(User Interface,简称 UI,亦称使用者界面)是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。软件设计可分为两个部分:编码设计与UI设计。 1.2 Andr…

【数据结构与算法】堆与堆排序

目录一.堆的实现1.堆的概念2.堆的代码实现二.堆排序的讲解一.堆的实现 1.堆的概念 堆是一种数据结构,首先它总是一颗完全二叉树(因为堆适合表示完全二叉树),在逻辑上堆是一颗完全二叉树,真正实现上是使用数组来实现的。根据不同的规则(任意…

OpenMV快速上手 | OpenMV硬件版本概述及HelloWorld

文章目录一、OpenMV1. 什么是OpenMV2. OpenMV版本2.1. OpenMV1(M4 V1)2.2. OpemMV2(M4 V2)2.3. OpenMV3(M7)2.4. OpenMV4(H7)二、OpenMV开发环境搭建三、hello world1. 连接OpenMV2.…

AtCoder Beginner Contest 295——A-D讲解

蒟蒻来讲题,还望大家喜。若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻讲解一下AtCoder Beginner Contest 295这场比赛的A-D题! A - Probably English Problem Statement You are given NNN strings W1,W2,…

开关电源Y电容放置的位置

Y电容,是我们工程师做开关电源设计时都要接触到的一个非常关键的元器件,它对EMI的贡献是相当的大的,但是它是一个较难把控的元器件,原理上并没有那么直观易懂,在EMI传播路径中需要联系到很多的寄生参数才能够去分析。 …