Unreal Engine 网络系统(一):网络模型及网络视角下的Gameplay框架

个人学习记录,如有错误请及时联系我!欢迎交流!

1.客户端-服务器模型

  • 服务器:有一个客户端担当游戏状态的主控者
    • 作用:做出所有重要决定,保证公平性,包含所有主控状态,处理客户端连接,转移到新地图,处理比赛开始结束等总体游戏流程等。
    • 启动服务器指令:
      • 监听服务器:UE4Editor.exe ProjectName MapName?Listen -game
      • 专用服务器:UE4Editor.exe ProjectName MapName -server -game -log
      • 客户端:UE4Editor.exe ProjectName ServerIP -game

注:启动指令需要在控制台使用,并将虚幻编辑器路径设置在用户环境变量中。专用服务器在默认情况下并不会显示窗口。如果不使用-log,将不会看到任何呈现专用服务器的窗口。 

注:专用服务器,UE允许用户设计专用服务器,与设计客户端-服务器模型一样,专用服务器去掉客户端特性隔绝用户触及游戏数据,保证游戏公平,提升游戏稳定性(客户机运行环境复杂,如果出现崩溃,将导致所有游戏终止)。《绝地求生》使用的就是专用服务器。通过C++源码可以编译独立服务器。

  • 客户端:连接的客户端保持近似副本

2.特点

  • 前端人员(游戏客户端)必须遵循Listen-Server游戏设计原则,将核心逻辑放在“主机端”执行,保证主机端动作合理,客户端即可真正执行动作。
  • Listen-Server体系意味着服务器是权威的所有数据必须先从客户端发送到服务器,然后服务器验证数据并根据代码作出反应
  • 基于以上特点,虚幻网络系统具有高效的开发特性,开发人员可独立完成联网设计。
  • 虚幻网络系统的核心设计点是同步数据和同步行为

 3.网络视角下的Gameplay框架

先直接说结论:

  • GameMode:游戏模式,唯一一个,代表游戏规则,肯定在服务端。
  • GameState:书记员,传教士,传递游戏信息。所有终端都得有。
  • PlayerController:提线木偶的灵魂,负责牵线搭桥。所有终端都有,因为大家都得互相通过服务器传递消息。值得一提的是,Server持有所有Client的PlayerController,因为Server要和所有Client进行沟通,而Client只持有自己的PlayerController,不需要持有其他玩家的状态。

举个栗子:以前的魔兽世界就是Client持有其他Client的状态,当一个玩家掉线了,为了游戏的公平性,此时其他所有玩家都得等这个掉线的玩家;而虚幻的网络模型中Client只需要与Server进行沟通,不与其他玩家进行信息交换。

  • PlayerState:同上,所有终端都有。
  • Pawn:提线木偶,同上,所有终端都有。
  • HUD:自己有。支持有自己的UI。

综上所述,我们可以把持有状态分为以下四种:

  • Server Only
  • Server & Clients
  • Server & Owning Client
  • Owning Client Only

如下图所示

更直观的:

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

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

相关文章

Redis高级篇

文章目录面试题库redis有哪些用法?redis单线程时代性能依然很快的原因?主线程和IO线程怎么协作完成请求处理的BigKey(重要)什么算是BigKey?怎么发现BigKey?怎么删除bigkey?bigkey生产调优缓存双…

ElasticSearch快速入门详解(亲测好用,强烈推荐收藏)

3.快速入门 接下来快速看下elasticsearch的使用 3.1.概念 Elasticsearch虽然是一种NoSql库,但最终的目的是存储数据、检索数据。因此很多概念与MySQL类似的。 ES中的概念数据库概念说明索引库(indices)数据库(Database)ES中可…

小菜鸟Python历险记:(第四集)

今天写的文章是记录我从零开始学习Python的全过程。在Python中函数是非常重要的,这里也可以称为方法。在前面分享的几篇文章中用到的方法有print(),str(),int().这些都是方法,而除了上面写的这几种内置方法以外,我们也可以自己在程序中自定义…

【C++】用手搓的红黑树手搓set和map

目录 一、set/map的底层结构 1、set/map的源码 2、利用模板区分set/map 3、利用仿函数控制比较大小 二、set/map的迭代器(红黑树的迭代器) 1、红黑树的begin、end迭代器 2、红黑树迭代器的operator 3、红黑树迭代器的operator-- 三、set的const…

设置Typora图床(Github)

PicGo,Github,Typora Nodejs下载: Node.js PicGo下载: GitHub - Molunerfinn/PicGo: A simple & beautiful tool for pictures uploading built by vue-cli-electron-builder 选择downloads或release. 然后进行安装。 Gith…

MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)

云盘分享文件: 链接:https://pan.baidu.com/s/11sbj1QgogYHPM4udwoB1rA 提取码:l2wz 1.mongodb简单介绍 MongoDB的 官网 内容还是挺丰富的。 是由 C语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下&…

数据库面试题——锁

了解数据库的锁吗? 锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。 InnoDB下两种标准行级锁: 共享锁(S Lock),允许事务读一行数据。 排他锁(X Lock&…

ChatGPT没有API?OpenAI官方API带你起飞

目录ChatGPT没有API?OpenAI官方API带你起飞安装 OpenAI 的 API 库包装个函数包装个UIAPI 调不通怎么办?ChatGPT没有API?OpenAI官方API带你起飞 前段时间ChatGPT爆火,OpenAI 的 GPT API也被大家疯狂调用, 但其实这个AP…

『OPEN3D』1.6 Voxelization体素化

目录 1 从triangle meshes中创建体素 2 从点云中创建体素 3 体素包含测试(Inclusion test) 4 Voxel carving 在点云处理的内容中,简单介绍了open3d中对点云下采样使用了体素的操作,这里对体素化进行详细的介绍。 点云和三角面…

【服务器数据恢复】使用碎片拼接方法恢复SQL Server数据库的数据恢复案例

服务器数据恢复环境: 某公司一台DELL服务器,作为WEB服务器使用,安装的Windows Server操作系统,配置了SQL Server数据库; 采用了Xen Server虚拟化系统; 底层是通过raid卡,用4块STAT硬盘搭建的RAI…

debian部署docker(傻瓜式)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 debian10部署dockerdebian10部署docker(傻瓜式)一、准备工作二、**使用 APT 安装,注意要先配置apt网络源**1.配置网络源2.官方下载三、安装…

Tomcat部署及优化

目录 1.Tomcat概述 1.Tomcat的概念 2、Tomcat的核心组件 3.Java Servlet 的概念 4.JSP的概念 5.Tomcat中最顶层的容器------server 6.四个子容器的作用 7.Tomcat请求过程 2.Tomcat服务部署 1.Tomcat服务部署的步骤 2.实例操作:Tomcat服务部署 3.Tomcat 虚拟主机配置…

FPGA基于RIFFA实现PCIE采集ov5640图像传输,提供工程源码和QT上位机

目录1、前言2、RIFFA理论基础3、设计思路和架构4、vivado工程详解5、上板调试验证并演示6、福利:工程代码的获取1、前言 PCIE是目前速率很高的外部板卡与CPU通信的方案之一,广泛应用于电脑主板与外部板卡的通讯,PCIE协议极其复杂&#xff0c…

Python数据分析之读取Excel数据并导入数据库

曾某年某一天某地 时间如静止的空气 你的不羁 给我惊喜 ——《谁愿放手》陈慧琳 文章目录前言一、Python读取Excel数据(一)创建测试Excel表(二)读取Excel(三)结果展示二、Python连接mysql数据库&#xff08…

人工智能的几个研究方向

人工智能主要研究内容是:分布式人工智能与多智能主体系统、人工思维模型、知识系统、知识发现与数据挖掘、遗传与演化计算、人工生命、人工智能应用等等。 其中热门研究有以下几种。 一、计算机视觉 就包括图像识别,视频识别,具体应用有人…

Apollo 配置变更原理

我们经常用到apollo的两个特性:1.动态更新配置:apollo可以动态更新Value的值,也可以修改environment的值。2.实时监听配置:实现apollo的监听器ConfigChangeListener,通过onChange方法来实时监听配置变化。你知道apollo…

Spring框架中IOC和DI详解

Spring框架学习一—IOC和DI 来源黑马Spring课程,觉得挺好的 目录 文章目录Spring框架学习一---IOC和DI目录学习目标第一章 Spring概述1、为什么要学习spring?2、Spring概述【了解】【1】Spring是什么【2】Spring发展历程【3】Spring优势【4】Spring体系…

Windows与Linux端口占用、查看的方法总结

Windows与Linux端口占用、查看的方法总结 文章目录Windows与Linux端口占用、查看的方法总结一、Windows1.1Windows查看所有的端口1.2查询指定的端口占用1.3查询PID对应的进程1.4查杀死/结束/终止进程二、Linux2.1lsof命令2.2netstat命令一、Windows 1.1Windows查看所有的端口 …

springboot http转https

springboot http转https 一、安全证书的生成 可以使用jdk自带的证书生成工具,jdk自带一个叫keytool的证书管理工具,可以用它来实现签名的证书。 1、进入cmd命令控制终端 2、生成一个证书 别名:alias tomcat 密码:keypass 123…

Java中的JSON序列化和反序列化

文章目录Java 和 JSON 序列化JSON 简介JSON 是什么JSON 标准JSON 优缺点JSON 工具Java JSON 库JSON 编码指南Fastjson 应用添加 maven 依赖Fastjson API定义 Bean序列化反序列化Fastjson 注解JSONFieldJSONTypeJackson 应用添加 maven 依赖Jackson API序列化反序列化容器的序列…
最新文章