Unity之NetCode多人网络游戏联机对战教程(7)--联机概念理解权威性Authority

本文主要是介绍Unity之NetCode多人网络游戏联机对战教程(7)--联机概念理解权威性Authority,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 前言
    • IsOwner
    • 权威 / Authoritative
    • IsHost
    • IsServer
    • IsClient
    • IsLocalPlayer

前言

在联机游戏中,常见的模式有Peer-to-Peer, ClientServer,也就是CS架构。NetCode基于CS架构开发,下面讲解一些概念知识。在NetCode中,会涉及一些如

  • IsHost
  • IsServer
  • IsClient
  • IsLocalPlayer
  • IsOwner
  • 权威 / Authoritative

这些概念知识在实际项目开发中经常使用到,所以,非常有必要搞清楚这些概念知识。


IsOwner

如果运行该脚本的构建是该GameObject的所有者,则该字段将为true
例如,通过在NetworkManager上Player Prefab字段中分配玩家,玩家将被生成。因此,当玩家加入时,NetworkManager自动生成一个PlayerPrefab并将该对象的所有权赋予该玩家。

始终记住代码在何处运行。Player脚本将在每个构建中为每个玩家执行。因此,如果连接了4个玩家,那么在主机构建中将有4个Player脚本,只有其中一个将IsOwner设置为true。在第二个玩家构建中,仍将有4个Player脚本,并且再次只有一个(不同的一个)将IsOwner设置为true。

通过这种方式,我们确保只有本地玩家(相对于该构建而言)将运行MovementInteract代码。


权威 / Authoritative

权威 / Authoritative区分为服务端权威客户端权威,还有两者混合使用。两者区分:

  • 服务端权威(Server Authoritative)

    • 服务器通常具有全局权威性,尤其是对于游戏世界中的关键元素,如玩家的位置、物体的状态等。
    • 服务器决定游戏状态的权威性,客户端只接收并显示这些状态。这有助于防止作弊和保持游戏的一致性。
  • 客户端权威(Client Authoritative)

    • 在某些情况下,客户端可能具有权威性,尤其是在需要快速响应的本地操作方面,例如玩家的输入。
    • 但是,客户端权威性很容易受到作弊和不一致性的影响,因此通常需要服务器进行验证和纠正。
  • 混合权威(Hybrid Authoritative)

    • 有时,可以采用混合权威性的方法,即在客户端和服务器之间共享权威性。
    • 比如,客户端可能对一些本地的、非关键的玩家操作具有权威性,而服务器则负责处理重要的游戏状态。

哪个更好?服务器权威还是客户端权威?

没有全局的“最佳”选择,一切都取决于你正在制作的游戏。这个问题实际上涉及到信任,你是否信任你的客户端,或者即使客户端不可信,游戏仍然能正常运行?如果是的话,比如对于合作游戏,那么客户端权威可能会很好地工作。

如果你有一个更具竞争性的游戏,比如FPS,而且有玩家之间相互竞争的情况,这些玩家可能是陌生人,那么你可能不应该信任客户端,因此应该选择服务器权威。


IsHost

  • IsHost 通常用于指示当前客户端是否充当游戏的主机。主机是游戏会话的创建者,通常负责托管游戏的核心逻辑和数据。

  • 在某些游戏中,主机可能与Server合并,但在其他游戏中,主机可能只是负责处理与本地游戏实例相关的事务,而Server负责全局同步和多人游戏的处理。

  • 通常,如果一个客户端是主机,则该客户端可以执行一些特殊的任务,如决策游戏的规则、同步状态等。

可以简单理解为Host既是Server又是Client

IsServer

  • IsServer 通常用于指示当前客户端是否充当游戏的服务器。服务器负责处理游戏的全局状态和同步,以确保多个客户端之间的一致性。

  • 在一些架构中,主机和服务器可能是相同的实体,但在其他情况下,它们可能是分离的。服务器通常是一个中央实体,负责维护整个游戏的状态,并将状态同步到所有连接的客户端。

理解这两个概念的关键在于了解游戏架构是如何设计的。在一些情况下,主机和服务器可以合并为一个实体,而在其他情况下,它们可能是不同的实体。通常,主机用于指代游戏会话的创建者和本地实例的控制者,而服务器用于指代全局状态的维护者和多人游戏的协调者。


IsClient

  • IsClient 是一个用于判断当前代码是否在客户端运行的属性。

  • 在代码中,开发者可以使用 IsClient 属性来区分处理客户端特有的逻辑。例如,处理本地输入、控制本地玩家对象等。

  • 当需要在客户端和服务器端执行不同的代码时,可以帮助确保适当的逻辑仅在客户端执行。

IsLocalPlayer

  • IsLocalPlayer 通常用于标识一个游戏对象是否属于本地玩家。

  • 在许多多人游戏系统中,每个客户端都可能有一个本地玩家,这是指在该客户端上进行控制的玩家。

  • 当一个对象的 IsLocalPlayer 标志为真时,表示该对象在本地玩家的客户端上。

这篇关于Unity之NetCode多人网络游戏联机对战教程(7)--联机概念理解权威性Authority的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/392162

相关文章

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker