UE(网络)

news2024/9/28 7:26:32

网络

前提:

联机模式和单机模式不同,单机模式仅考虑架构设计和逻辑问题,联网则需要考虑每个数据存放的 位置,以便在客户端或服务器正确交互通信存储,

由于联网的设计细节有很大不同,一些单机模式的设计在联网中并不适合,所以游戏开发前首先要确定是否联网,然后才开始支持联网的具体设计

数据规则:

网络模式下,为了所有玩家提供一致的体验,我们要考虑每一个数据,生成位置,复制方式等,同时还要最大限度减少信息复制量,避免网络带宽频繁饱和

遵守一下规则:

服务器是权威的,保存大部分数据(以便和所有客户端通信),重要数据(防止作弊)

客户端负责渲染(图形和音频),和保存非重要数据(不必传给服务器,因为消耗性能)

通信方式:

  • 客户端数据不通信
  • 客户端数据传给服务器
  • 服务器数据传给某个(仅一个玩家渲染)/多个(多个玩家渲染)/所有(所有玩家看到一致的画面)客户端

客户端间不能彼此通信,如果想要通知其他客户端,首先需要通知服务器,再由服务器通知指定客户端
我们可以将事件函数设置为rpc,让事件在哪执行,但本质也是更改内部数据的位置

我们必须清楚每个数据的位置,否则容易访问不到

网络延迟,服务器到客户端彼此通信容易出现丢包,因此应检查是否数据正确传输,可以直接通过添加引脚

只有在服务器生成的,才能PRC Server

内置数据生成位置

参考文章

ue内置会自动同步一些模块,因此我们需要清楚在属于谁

player controller 每个玩家有一份,服务器有一份,客户端有一份

pawn / character,最开始属于服务器,会按照客户端数量创建,是Replicated,因此会渲染到每个客户端,但是因为自己的那份会和player controller绑定,因此属于本地客户端,其他不属于的仅仅在本地渲染

widget,不重要数据,仅在本地

actor,具体考虑生成位置,默认在服务器,手动生成则看具体生成位置

……

会话模式:

  1. 单机:NM_Standalone主机需要同时运行服务器端和客户端逻辑
  2. 专用服务器:NM_Dedicated没有本地玩家的服务器(常用于需要更持久、安全或大规模多玩家的游戏)成本更高,更难配置。专用服务器需要独立于所有游戏参与玩家的计算机  ,这样更能保证公平性。
  3. 监听服务器:NM_ListenServer有一个本地玩家,此玩家负责托管游戏(常用于临时合作和竞技多人游戏。) 以简单易用为设计出发点,可供用户自发进行设置,可供网络上的其他玩家链接。(可能引发游戏公平性的问题)
  4. 客户端:NM_Client连接到远程服务器的客户端(服务器看不到,所有窗口都是客户端)。

(一)服务器->客户端复制

客户端通信:

Replicated 为属性复制提供了指定特定条件的选项,可以设置自定义复制条件

Replicated Using为属性提供函数,当属性被复制时,客户端就会调用该函数。

NotReplicated 通常用于struct中

使用Replicated 

  1. Replicated 声明属性为可复制
  2. 构造函数中 bReplicates = true;表示此actor可以被复制
  3. 网络复制 && 配置属性的复制方式:

Super::GetLifetimeReplicatedPropsTArray<FLifetimeProperty>&存储所有 要复制的属性)复制属性

复制宏:DOREPLIFETIMEAclass,属性name)当发生更改,会将值复制到所有客户端 doreplifetime)属性元数据说明符服务器会在复制的属性每次更改其值时向每个连接 的客户端发送更新。

使用Replicated Using

  1. ReplicatedUsing = OnRep_funcname

复制条件 &复制宏:更精细地控制属性的复制GetLifetimeReplicatedProps方式:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/replicate-actor-properties-in-unreal-engine#%E6%B7%BB%E5%8A%A0%E5%A4%8D%E5%88%B6%E7%9A%84%E5%B1%9E%E6%80%A7

DOREPLIFETIME_CONDITIONAclass,属性name,复制条件(复制到哪些连接))但不会自动调用任何通知函数。

DOREPLIFETIME_CONDITION_NOTIFYAclass,属性name,复制条件,REPNOTIFY_Always在每次复制属性时调用OnRep_||REPNOTIFY_OnChanged仅在属性更改时调用OnRep_)会在属性的值发生变化时自动调用指定的通知函数。

(二)客户端<->服务端通信:

RPC(Remote Procedure Call)远程程序调用

用于在网络游戏中进行客户端和服务器之间的通信,从一台计算机调用函数,并在不同的计算机上运行它

·  Server:由客户端调用并在服务器上执行。

·  Client:由服务器调用并在特定客户端上执行。

·  Multicast:由服务器调用并在所有客户端上执行。

声明函数:UFUNCTION(……, Reliable):

  1. Server客户端上调用、但需要在服务器上执行
  2. Client 在服务器上调用、但需要在客户端上执行
  3. NetMulticast多播: 从服务器调用,所有客户端上执行

C++API

IsLocallyControlled()是否是客户端

GetLocalRole()  == enum  返回的是当前对象在本地机器上的角色类型,用于区分当前是客户端还是服务器

·  0ROLE_None: 没有分配角色。

·  1ROLE_SimulatedProxy: 客户端的模拟代理,不是权威版本。

·  2ROLE_AutonomousProxy: 客户端的自主代理,客户端拥有控制权

·  3ROLE_Authority: 服务器端的控制权,具有最高权限。

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

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

相关文章

TypeScript入门 (五)异步编程与前后端交互

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文旨在全面介绍 TypeScript 中的异步编程与网络请求&#xff0c;帮助读者深入理解 TypeScript 中的 asyn…

Colorful/七彩虹将星X17 XS 22 Win11原厂OEM系统 带COLORFUL一键还原

安装完毕自带原厂驱动和预装软件以及一键恢复功能&#xff0c;自动重建COLORFUL RECOVERY功能&#xff0c;恢复到新机开箱状态。 【格式】&#xff1a;iso 【系统类型】&#xff1a;Windows11 原厂系统下载网址&#xff1a;http://www.bioxt.cn 注意&#xff1a;安装系统会…

Redis 五大基本数据类型及其应用场景进阶(缓存预热、雪崩 、穿透 、击穿)

Redis 数据类型及其应用场景 Redis 是什么? Redis是一个使用C语言编写的高性能的基于内存的非关系型数据库&#xff0c;基于Key/Value结构存储数据&#xff0c;通常用来 缓解高并发场景下对某一资源的频繁请求 &#xff0c;减轻数据库的压力。它支持多种数据类型,如字符串、…

Linux安装JDK及配置环境变量超详细教程

微服务Linux解析部署使用全流程 linux系统的常用命令 Linux安装vim超详细教程 Linux安装tomcat及配置环境变量超详细教程 1、上传压缩包 统一创建目录&#xff1a;/usr/local/jdk&#xff0c;将压缩包上传到这个目录下。拖动文件到这个目录下即可。 2、执行解压命令 先进…

ELMO理论

目录 1 优点 2 缺点 3.知识点个人笔记 2018年3月份&#xff0c;ELMo出世&#xff0c;该paper是NAACL18 Best Paper。在之前2013年的word2vec及2014年的GloVe的工作中&#xff0c;每个词对应一个vector&#xff0c;对于多义词无能为力。ELMo的工作对于此&#xff0c;提出了一…

在 Gitlab 中使用 ChatGPT 进行 CodeReview

ChatGPT集成Gitlab&#xff0c;实现自动代码审计并进行评论&#xff0c;为软件开发团队提供高效、智能的代码审查解决方案。支持其他模型如通义千问等 自动触发与及时响应&#xff1a;利用Gitlab的Webhook功能&#xff0c;实现代码提交、合并请求和标签创建等事件的自动触发。一…

安全帽检测系统丨OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

国产化低功耗低延时广覆盖物联网无线通讯方案_LAKI模组

01 物联网系统中为什么要使用LAKI模组。 物联网系统中使用LAKI模组的原因可以归结为以下几个方面&#xff1a; 技术先进性 广覆盖能力&#xff1a;LAKI模组具有卓越的广覆盖能力&#xff0c;其射频SoC芯片接收灵敏度小于-120dBm125kbps&#xff0c;系统通讯距离可达5千米以上…

一款好用的多种格式电子书制作软件

在数字化阅读日益普及的今天&#xff0c;电子书已经成为人们日常生活中不可或缺的一部分。而一款功能强大、操作简便的电子书制作软件&#xff0c;无疑是满足广大用户需求的最佳选择。 这款软件名为“FLBOOK在线制作电子杂志平台”&#xff0c;它支持多种格式输入&#xff0c;如…

设计模式、系统设计 record part02

软件设计模式&#xff1a; 1.应对重复发生的问题 2.解决方案 3.可以反复使用 1.本质是面向对象 2.优点很多 1.创建型-创建和使用分离 2.结构型-组合 3.行为型-协作 571123种模式 UML-统一建模语言-Unified Modeling Language 1.可视化&#xff0c;图形化 2.各种图&#xff08;9…

Python编程:08- pycharm使用技巧

新建文件时,自动填充代码 设置方法&#xff1a; settings→editor→file and code templates,选择python script #${NAME} 文件名 #${DATE} 日期自动补齐 if name ‘main’: # 先输入main,然后按tab键自动补齐自定义的段落 settings→editor→live templates,在右侧点击号…

C语言进阶版第12课—字符函数和字符串函数1

文章目录 1. 字符分类函数1.1 库函数iscntrl1.2 库函数isspace1.3 库函数islower和isupper 2. 字符转换函数3. strlen函数的使用和模拟实现3.1 strlen函数的使用3.2 strlen函数的模拟实现 4. strcpy函数的使用和模拟实现4.1 strcpy函数的使用4.2 strcpy函数的模拟实现 5. strca…

manim页面中不规则分割整个人页面。

界面中的分割方式 在信息设计中&#xff0c;我们常常需要通过分割设计的方式来对信息进行分组&#xff0c;界面中的分割方式大致分为三种&#xff1a;卡片、线条、留白。 界面中的分割方式主要可以分为以下几种&#xff1a; 一、根据规则进行分割&#xff1a; 规则网格分割&…

Starrocks with 嵌套

在某些场景下需要进行 with 嵌套 需要以下进行处理&#xff0c;报如图错误 with abc as (select * from .. ) insert into xxx select * from abc尝试创建物化视图 CREATE MATERIALIZED VIEW IF NOT EXISTS ads_test.xxx_mv REFRESH DEFERRED MANUAL AS with abc as (select…

C#基于SkiaSharp实现印章管理(9)

将印章设计模块设计的印章保存为图片并集中存放在指定文件夹内。新建印章应用项目&#xff0c;主要实现对图片及PDF文件加盖印章功能。本文实现给图片加盖印章功能。   给图片加盖印章的逻辑比较简单&#xff0c;就是将印章图片绘制到图片指定位置&#xff0c;使用SKControl控…

如何选择数据库架构

选择合适的数据库架构是一个复杂的过程&#xff0c;它取决于多种因素&#xff0c;包括应用程序的需求、数据量的大小、并发访问量、数据一致性要求、预算以及技术团队的熟悉程度等。以下是一些关键的步骤和考虑因素&#xff0c;帮助你选择合适的数据库架构&#xff1a; 1. 分析…

JITWatch安装使用方法

JITWatch 版本1.4.2 JDK 版本 11以上 1.下载JITWatch&#xff1a; https://github.com/AdoptOpenJDK/jitwatch/releases/download/1.4.2/jitwatch-ui-1.4.2-shaded-win.jar 2.启动 bat脚本执行&#xff1a;通过启动jar包方式启动JITWatch echo off start cmd /c "ti…

人工智能 实验1 Python语法

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 实验1 Python语言基础一 【实验目的】掌握Python及其集成开发环境的下载安装及其简单应用 【实验内容…

结合了LLM(大语言模型)的编辑器,不仅能理解人类语言,还能与用户互动,仿佛有了自己的思想。...

从前有一个神奇的编辑器王国&#xff0c;那里住着各种编辑器&#xff1a;开源的、AI代码编辑器、视频编辑器&#xff0c;还有专门处理邮件和音频的编辑器。一天&#xff0c;国王Markdown决定举办一场盛会&#xff0c;邀请所有编辑器展示各自的才华。 开源编辑器们自豪地展示了他…

解决hbase和hadoop的log4j依赖冲突的警告

一、运行hbase的发现依赖冲突的警告 这警告不影响使用 二、重命名log4j文件 进入HBase的lib包下&#xff0c;将HBase的log4j文件重命名&#xff0c;改成备份&#xff0c;这样再次运行hbase的时候&#xff0c;就没有依赖冲突了。 三、冲突成功解决