Unity联网多人游戏技术方案调研

news2024/12/23 15:12:45

关于联网方案

  • Listen Server (Host) 和 Relay转发服务器游戏包同时包含客户端和服务端逻辑,联网时一个客户端开主,称为Host,其他客户端连入。局域网和互联网都支持。互联网需要有一个匹配服务器帮助找到不同人建立的主机。如果不使用Relay服务器,那对于互联网连接就要使用NAT穿透下的P2P,但是P2P的成功率是80%90%,所以还是需要转发服务器来处理剩下的10%20%的用户。Host模式下由于Host机是某一个客户的机子,性能不可控,如果Host机性能差则联网体验差。另外Host模式要处理Host掉线的问题。Host模式安全性也比较差,黑客可以使用一个破解修改后的客户端开主,从而作弊。好处是不需要独立的游戏服务器,除了匹配服和转发服之外没有什么开销。
  • Delicated Game Server(DGS)即服务端单独编译成一个包运行。需要独立的服务器去运行服务端,需要考虑扩容。好处是服务端机器性能可控,且可在全球部署多个服务器点位,给玩家分配最优的服务器。DGS模式可以将游戏逻辑或者校验逻辑写在服务端,安全性较高。

UNet

UNet是早期的方案,也被称为HLAPI (High Level API),提供了一系列高层组件进行快速的联网开发。网络拓扑方案使用了Listen Server模式同时支持Relay(转发),也支持DGS(专用游戏服务器)。UNet现在已经被官方废弃了,在Unity2020下面还可以通过安装HLAPI的包继续使用,但Unity2021已经找不到这包了。

MLAPI / Netcode (for GameObjects)

即Middle Level API,是一个开源项目,被Unity采用。现在Unity已经升级为Netcode for GameObjects了。他提供了比较中间级的接口,比如 NetworkVars, SyncVars, RPCs, scene management, Messaging System。同样有DGS模式,也支持Relay,最多支持64人(但如果不使用RPC据说可以支持更多人数)。不过这个库还比较新,感觉不够成熟。

Netcode supports the following platforms:

Windows, MacOS, and Linux
iOS and Android
XR platforms running on Windows, Android, and iOS operating systems
Most closed platforms, such as consoles. Contact us for more information about specific closed platforms.

When working with consoles (such as PlayStation, Xbox, or Nintendo Switch), there may be Netcode-specific policies you should be aware of while testing and before launching your game live. Refer to the console’s internal documentation for more information. This content is typically protected by NDA.

Mirror

https://assetstore.unity.com/packages/tools/network/mirror-129321

免费的第三方插件,也是一个高层的API。使用client-server模式,并且提供很多中间层特性,如SyncVars。

其他收费插件

DarkRift2, Photon PUN, Photon Quantum2.0这几个都是收费的。
在这里插入图片描述

非Unity集成方案

以上方案/插件都是可以高度集成到Unity中,都是直接使用Unity C# API写逻辑的。现在有一些开源的或者自研的服务端方案,比如使用Go,Lua, C++, Rust, Java等开发的服务器,这种基本都是独立服务器DGS,服务器端就不能使用Unity的API写逻辑了,比如物理计算和寻路等,都要是有其他方案,脱离了Unity引擎,而客户端就要使用底层的网络代码,重新封装到游戏逻辑层。此方案适合大型项目或者公司本来有积累的代码库,可以最大程度的定制开发,但是成本也较高(也要看积累)。

参考资料

  • https://docs-multiplayer.unity3d.com/netcode/current/about

  • https://docs-multiplayer.unity3d.com/netcode/current/about

  • https://images.response.unity3d.com/Web/Unity/%7B305691e0-36c5-4b1a-ae4d-a2e43d4569cb%7D_Unity-Choosing_Netcode-Research_Report-v1_1.pdf

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

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

相关文章

校招前端二面常考react面试题(边面边更)

高阶组件 高阶函数:如果一个函数接受一个或多个函数作为参数或者返回一个函数就可称之为高阶函数。 高阶组件:如果一个函数 接受一个或多个组件作为参数并且返回一个组件 就可称之为 高阶组件。 react 中的高阶组件 React 中的高阶组件主要有两种形式…

verilog学习笔记- 6)verilog基础知识

目录 Verilog 的逻辑值: Verilog 的标识符(类似C中的变量名): 1) 定义: 2) 规范建议: Verilog 的数字进制格式: Verilog 的数据类型: 1) 寄存器类型: 2) 线网类型: 3) 参数类型: Verilog 的运算符&#xff1a…

Logistic Regression 逻辑斯蒂回归

文章目录5、Logistic Regression 逻辑斯蒂回归5.1 回归任务5.1.1 MNIST Dataset5.1.2 CIFAR-10 Dataset5.2 Regression vs Classification 回归 vs 分类5.3 Sigmoid functions5.3.1 Logistic Function [0, 1]5.3.2 Other Functions [-1, 1]5.4 Model 模型5.5.1 torch.sigmoid()…

Mybatis基本使用

Mybatis1、Mybatis简介1.1、什么是MyBatis1.2、持久化1.3、持久层1.4、为什么需要Mybatis2、MyBatis第一个程序2.1、代码演示3、CRUD操作3.1、namespace3.2、select3.3、insert3.4、update3.5、delete3.6、思考题4、配置解析4.1、核心配置文件4.2、environments元素4.3、mapper…

点进详情巩固 react-router-dom v6

使用几段代码,再次巩固一下 v6 的使用 0. 安装 npm i react-router-dom1. 配置路由 import {StrictMode } from "react" import ReactDOM from "react-dom/client" import App from "./App" import {HashRouter

Word处理控件Aspose.Words功能演示:使用 C# 将 Word 转换为 HTML

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

实现自定义springboot的starter

引言 学过springboot的肯定用过各种starter,通过这些starter我们可以节省很多没有必要的配置,让项目更简洁,配置起来也更简单。那么starter是怎么开发的呢?这里我通过一个简单的案例演示如何创建一个自己的starter。 初始化项目…

Java毕业生就业系统学生就业统计系统

简介 本项目主要是为了统计毕业生就业情况(就业方向分为四种:参加工作,考研,自主创业,待就业),教师可登入该系统查看学生就业情况,包括:考研、职业领域、工作城市&#…

黑马C++ 05 核心项目 —— 职工管理系统

文章目录1. 管理系统需求2. 创建管理类2.1 创建文件 workerManager.h 与 workerManager.cpp2.2 头文件实现 workerManager.h —— 只做函数声明不做实现2.3 源文件实现 workerManager.cpp —— 对声明的函数进行实现3. 菜单功能3.1 添加成员函数 —— workerManager.h添加 void…

Tic-Tac-Toe人机对弈程序(python实现)

目录 1. 前言 2. 处理流程 3. 代码 4. 代码说明 4.1 棋盘显示 4.2 初始化 4.3 人类棋手的下一步 4.4 AI棋手的下一步 4.5 终局及胜负判断 5. 棋局示例 1. 前言 前面几篇博客(以循序渐进的方式)实现了Tic-Tac-Toe游戏的棋局搜索、遍历以及所有可…

植物大战僵尸:寻找阳光掉落Call调用

通过遍历阳光产生的时间,寻找阳光产生的本地Call,使用代码注入器注入,自定义生成阳光 阳光CALL遍历技巧: 进入植物大战僵尸-> 当出现阳光后->马上搜索未知初始数值返回游戏-> 马上切回CE-> 搜索减少的数值-> 掉一点搜一点最后排查出它的掉落地址-&…

Eureka Server 开启Spring Security Basic认证

概 述 Eureka Server 在实际使用过程中必须考虑安全问题,比如 未认证的用户 不允许其随意调用 Eureka Server的 API;还有一个则是 未认证的 Eureka Client 也禁止其注册到 Eureka Server中来,这些都是可以在工程中进行配置的,当然…

蓝桥杯寒假集训第七天(修改数组)

没有白走的路,每一步都算数🎈🎈🎈 题目描述: 给定一个已知长度的数组,要求出由其变换而来的一组没有重复数据的数组。假定有一个数组A[0,1,2,3,4]。要求如果A[i]在之前的数组A[0,1,2,3..i-1]之中若出现过&…

关于win11 21H2 升22H2及安装安卓子系统的记载

前言 电脑是i7 7700的,没有TPM2.0。但是喜欢折腾,喜欢win11任务栏的居中,之前win10的时候,会用插件折腾。既然有原生的了,自然更好了。 win11系统升级 关于win11系统下载 直接百度搜索win11系统下载,然…

【数据结构】(牛客)链表的回文结构,LeetCode相交链表,LeetCode环形链表

目录 一、链表的回文结构 1、题目说明 2、题目解析 二、相交链表 1、题目说明 2、题目解析 三、环形链表 1、题目说明 2、题目解析 一、链表的回文结构 1、题目说明 题目链接:链表的回文结构 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度…

RHCE-ssh服务设置

目录 要求: 1.两台机器:第一台机器作为客户端,第二台机器作为服务器,在第一台使用rhce用户免密登录第二台机器 2.禁止root用户远程登录和设置三个用户sshuser1, sshuser2, sshuser3 3, 只允许sshuser3登录&#xff…

Java开发入门到精通之Java的数据库访问

一、前言 在应用程序开发中,需要使用数据库管理和存储各种数据。在Java中,提供了一个JDBC技术(Java Database Connectivity,JDBC,Java数据库连接),它的作用是连接数据库并访问。接下来小编带大家一起来学习JDBC技术! …

天猫汽车商详页的SSR改造实践

由于汽车业务的特殊性,天猫汽车基于 Rax 多页应用自建了商品详情的 H5 页面。自定义商详承载了众多业务能力和投放场景。随着业务的发展和页面承载内容的增多,开始出现白屏时间太长等体验问题。前端性能优化算是个老生常谈的问题,我们的页面已…

DBeaver安装教程

软件安装包官网地址https://dbeaver.io/但一般由于网络问题,我们是很慢才连接上,或者连接不上这里提供压缩包链接,解压可直接用,亲测链接:https://pan.baidu.com/s/14KGY0JakRTOHQVkiRUWc7g?pwdcxda 提取码&#xff1…

2022年第十二届APMCM亚太杯1月增赛E题思路分享

2022年亚洲及太平洋地区建模数学竞赛问题E 有多少颗核弹可以摧毁地球? 题目回顾: 1.基本数据分析 a) 哪些国家曾经拥有过核武器? b) 在过去的20年中,哪个国家的核武器库存减少或增加得最多? c) 在哪五年早,核武器试验发生的次数最多…