虚幻中的网络概述一

前置:在学习完turbo强大佬的多人fps之后发觉自己在虚幻网络方面还有许多基础知识不太清楚,结合安宁Ken大佬与虚幻官方文档进行补足。

补充:官方文档中的描述挺好的,自己只算是搬运和将两者结合加强理解。

学习虚幻中的网络先从虚幻网络的架构说起:

先放上一张架构总结图

客户端-服务器模型(C/S模式)

网络中的一台计算机作为 服务器 主持多人游戏会话,而所有其他玩家的计算机作为 客户端 连接到该服务器。然后,服务器与连接的客户端分享游戏状态信息,并提供一种客户端之间通信的方法。如下图:

在服务器上才是多人游戏实际发生的地方

客户端会远程控制其在服务器上各自拥有的 Pawn,发送过程调用以使其执行游戏操作,但服务器不会将视觉效果直接流送至客户端显示器。服务器会将游戏状态信息 复制 到各客户端,告知应存在的Actor、此类Actor的行为,以及不同变量应拥有的值。然后各客户端使用此信息,对服务器上正在发生的情况进行高度模拟

以下是官方文档中举的一个网络多人游戏例子,分析了整个过程。此处需要时刻注意知晓的一点在客户端和服务器上都有一个玩家Pawn,客户端会远程控制其在服务器上各自拥有的 Pawn

玩家1在本地机器上按下输入以发射武器。

  • 玩家1的本地Pawn将武器的发射命令传送给服务器上对应的Pawn。
  • 玩家1在服务器上的武器生成发射物。
  • 服务器告知所有的客户端生成玩家1发射物的副本
  • 玩家1在服务器上的武器告知所有客户端播放武器发射音效和视觉效果。

玩家1的发射物从在服务器上的武器中射出并前移。

  • 此时,服务器告知所有客户端复制玩家1发射物发生的移动,因此各客户端上玩家1的发射物便发生相应移动。

玩家1在服务器上的发射物撞击玩家2的Pawn。

  • 碰撞触发摧毁服务器上玩家1发射物的函数。
  • 服务器自动告知所有客户端各自摧毁玩家1发射物副本。

  • 碰撞触发告知所有客户端播放附带碰撞音效和视觉效果的函数。

  • 玩家2在服务器上的Pawn承受发射物碰撞造成的伤害。

  • 玩家2在服务器上的Pawn告知玩家2客户端播放画面效果,作为对伤害的响应。

 总结:在网络游戏中,每台不同机器上的各场景均有各自的Pawn、武器及发射物的副本。服务器是游戏真正运行的地方,但我们要让客户端的场景看似发生了相同事件。因此,需要选择性地向各客户端发送信息,以在服务器上创建场景的视觉代表。


这里穿插一下虚幻中的网络模式

独立(StandAlone):游戏作为服务器运行,不接受远程客户端连接。参与游戏的玩家必须为本地玩家。此模式用于单人游戏和本地多人游戏。其将运行本地玩家适用的服务器逻辑和客户端逻辑。

客户端(As Client):游戏作为网络多人游戏会话中与服务器连接的客户端运行。其不会运行服务器逻辑。

聆听服务器(Listen Server):游戏作为主持网络多人游戏会话的服务器运行。其接受远程客户端中的连接,且直接在服务器上拥有本地玩家。此模式通常用于临时合作和竞技多人游戏。

专属服务器(Dedicated Server):游戏作为主持网络多人游戏会话的服务器运行。其接受远程客户端中的连接,但无本地玩家,因此为了高效运行,其将废弃图形、音效、输入和其他面向玩家的功能。此模式常用于需要更固定、安全和大型多人功能的游戏。

因为独立游戏服务器可同时作为服务器和客户端,为多人游戏创建的逻辑可在无需额外工作的情况下,在单人游戏中运行。

接下来介绍在服务器与客户端中分别存在的东西:

其中,GameMode只在服务器中存在;中间部分(GameState、Pawn、PlayerState)在服务端和客户端中都存在并且都一样,并且也是可以相互获取到的;

PlayerControlle部分,在服务端持有所有的PlayerController,客户端中分别只存在自己的Controller;

Game Instance UI在服务端和每个客户端上都是独立存在的。

这期就先到这啦~下期讲讲复制与RPC

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python机器学习】零基础掌握KNNImputer缺失值填充

面临数据不完整怎么办? 在日常生活和工作中,不完整或者缺失的数据是一个很常见的问题。例如,在医疗研究中,由于各种原因,如失访、设备故障等,数据集中可能存在一些缺失值。这些缺失值会影响后续的数据分析和模型训练。 KNNImputer(K-近邻插补)是一个非常实用的工具,…

【Docker】Python Flask + Redis 练习

一、构建flask镜像 1.准备文件 创建app.py,内容如下 from flask import Flask from redis import Redis app Flask(__name__) redis Redis(hostos.environ.get(REDIS_HOST,127.0.0.1),port6379)app.route(/) def hello():redis.incr(hits)return f"Hello Container W…

深度学习中的epoch, batch 和 iteration

名词定义epoch使用训练集的全部数据进行一次完整的训练,称为“一代训练”batch使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新,这样的一部分样本称为:“一批数据”iteration使用一个batch的数据对模型进行一次参数更新的过…

串行原理编程,中文编程工具中的串行构件,串行连接操作简单

串行通信原理编程,中文编程工具中的串行通信构件,串行通信连接设置简单 编程系统化课程总目录及明细,点击进入了解详情。https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502 串行端口 是串行的基础&#…

【C++】类与对象 第二篇(构造函数,析构函数,拷贝构造,赋值重载)

目录 类的6个默认成员函数 初始化和清理 1.构造函数 2.析构函数 3.共同点 拷贝复制 1.拷贝构造 使用细节 2.赋值重载 运算符重载 < < > > ! 连续赋值 C入门 第一篇(C关键字&#xff0c; 命名空间&#xff0c;C输入&输出)-CSDN博客 C入门 第二篇( 引…

Python学习笔记--类和对象

五、类和对象 1、类和对象之间的关系 这部分内容主要讲类和对象,我们先来说说类和对象之间的关系。 类是对象的模板 我们得先有了类,才能制作出对象。 类就相对于工厂里面的模具,对象就是根据模具制造出来的产品。 从模具变成产品的过程,我们就称为类的实例化。 类实…

POJ 3981:字符串替换 ← C++

【题目来源】http://poj.org/problem?id3981【题目描述】 编写一个C程序实现将字符串中的所有"you"替换成"we"。【输入格式】 输入包含多行数据。 每行数据是一个字符串&#xff0c;长度不超过1000。 数据以EOF结束。【输出格式】 对于输入的每一行&#…

【开源】基于SpringBoot的海南旅游景点推荐系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

P1022 [NOIP2000 普及组] 计算器的改良 题解

文章目录 题目背景题目描述输入格式输出格式样例样例输入样例输出 思路及部分实现完整代码 题目背景 NCL 是一家专门从事计算器改良与升级的实验室&#xff0c;最近该实验室收到了某公司所委托的一个任务&#xff1a;需要在该公司某型号的计算器上加上解一元一次方程的功能。实…

2017年上半年上午易错题(软件设计师考试)

CPU 执行算术运算或者逻辑运算时&#xff0c;常将源操作数和结果暂存在&#xff08; &#xff09;中。 A &#xff0e; 程序计数器 (PC) B. 累加器 (AC) C. 指令寄存器 (IR) D. 地址寄存器 (AR) 某系统由下图所示的冗余部件构成。若每个部件的千小时可靠度都为 R &…

【Python机器学习】零基础掌握partial_dependence检验、检查

在医疗健康的领域,有一个问题一直困扰着专家——如何从多个健康指标中找出影响患者健康最关键的因素?在这样的场景下,做出准确的预测非常关键,因为它直接关联到患者的生命安全。 解决这一问题的一个有效方法是利用机器学习算法,具体来说就是通过偏依赖图(Partial Depend…

微信小程序在线预览PDF文件

需求&#xff1a;微信小程序在线预览PDF合同文件&#xff0c;加载完成后强制阅读10秒才可点击同意按钮 H5代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" cont…

如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样,蓝牙接近了电脑,电脑自动解锁无需输入开机密码

环境&#xff1a; Win10 专业版 远程解锁 蓝牙解锁小程序 问题描述&#xff1a; 如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样&#xff0c;蓝牙接近了电脑&#xff0c;电脑自动解锁无需输入开机密码 手机不需要拿出来&#xff0c;在口袋里就可以自动解锁&#xff…

nlp之加载电商评论集

目录 代码代码解读 代码 import pandas as pddf pd.read_csv("../data/Clothing Reviews.csv") print(df.info())df[Review Text] df[Review Text].astype(str) x_train df[Review Text] y_train df[Rating]from tensorflow.keras.preprocessing.text import To…

Geeker-Admin中ProTable表格分页之自定义接口页码、尺寸参数

最近挖了个新玩意儿&#xff0c;Geeker-Admin&#xff0c;看起来感觉挺好。 鼓捣了半天搞定了与服务端的API接口对接&#xff0c;但在表格分页的时候又遇到了问题&#xff0c;系统默认是pageNum/pageSize这两个参数名用来分页&#xff0c;而服务端是current/size&#xff0c;开…

C#,数值计算——分类与推理,基座向量机的 Svmgenkernel的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public abstract class Svmgenkernel { public int m { get; set; } public int kcalls { get; set; } public double[,] ker { get; set; } public double[] y { get; set…

微信小程序瀑布流组件

话不多说直接上干货: 现在component中创建一个waterfull的文件夹&#xff0c;并创建对应的wxml,wxss,jx,json文件 wxml&#xff1a; <view class"content"><view class"content-left"><block wx:for"{{list}}" wx:key"…

机器学习-特征选择:如何使用互信息特征选择挑选出最佳特征?

一、引言 特征选择在机器学习中扮演着至关重要的角色&#xff0c;它可以帮助我们从大量的特征中挑选出对目标变量具有最大预测能力的特征。互信息特征选择是一种常用的特征选择方法&#xff0c;它通过计算特征与目标变量之间的互信息来评估特征的重要性。 互信息是信息论中的一…

前端线上部署,如何通知用户有新版本

前言 version-polling 是一个轻量级的 JavaScript 库&#xff0c;它可以实时检测 web 应用的 index.html 文件内容是否有变化。当服务端发布新版本后&#xff0c;前端会自动弹出更新提示&#xff0c;让用户刷新页面&#xff0c;以加载最新的资源和功能。这样可以提高用户体验和…

verilog vscode linux

安装 vscode 插件 插件&#xff1a;Verilog-HDL/SystemVerilog/Bluespec SystemVerilog 功能&#xff1a;.xdc .ucf .v 等代码高亮、代码格式化、语法检查&#xff08;Linting&#xff09;、光标放到变量上提示变量的信息等 关于其他语言的依赖工具等信息查看插件说明 代码对齐…