Mirror学习笔记(三) 组件简介

在这里插入图片描述


一、Network Animator(网络动画控制器)

Network组件允许你同步动作状态,它从Animator控制器中同步参数。
如在空对象中创建NetworkAnimator组件,则Mirror还会自动创建Network Identity和Animator组件。
在这里插入图片描述

Client Authority : 启用此选项可将对动画参数的更改坐客户端发送到服务器
Animator : 此字段可定义需要Network Animator 与之同步的Animator
Sync Mode: 通常更改将发送给此组件所在象的所有观察者。将Sync Mode(同步模式)更改为Owner only 会使该对像私有化。
Sync Interval : 同步间隔指定同步频率,以秒为单位

NetworkAnimator 确保整个网络上游戏动画对像的同步,这意味着所有玩家都能看到动画同时发生。
网张动画有两种类型的权限(服务器权限,客户端权限)

Animator Tiggers不同直接同步,调用NetworkAnimator.SetTrigger 代替,具有权限的对像可以使用SetTrigger函数在其他客户端上出发动画出发器。

如果游戏对像在客户端上有控制权限,则能够在在本地客户端设置动画效果。该客户端将动画状态信息发送到服务器,服务器再将其广播到所有客户端。
如果游戏对象在服务器端上有控制权,则应在服务器上对动画进行处理。然后将状态发送到其他客户端。这常用在与客户端无关的动画,如场景或NPC。


二、Network Authenticators(网络身份验证器)

在多人游戏开发时用于保存或统计游戏数据。通常你需要保留用户的唯一标识,能够区分用户的信息需要包含:

1.要求用户输入用户名称密码
2.第三方工具OAuth2 或OpenID 账号身份提供商,如:Facebook、Twitter、Google
3.使用第三服务,例如 PlayFab、GameLift 或 Steam
4.使用设备ID , 移动设备中非常流行的方式
5.在Android中使用Google Play
6.在IOS中使用GameCenter
7.在网站中使用Web服务

加密通知
如果你想通过Mirror进行身份验证,官方强烈建议使用加密传输,例如SimpleWebSocket传输,或者使用UnityWebRequest和HTTPS服务进行敏感数据交互。
这可以在Authenticator内容完成,也可以调用StartClient。
离线/在线场景
身份验证离线场景中进行,消息在预连接阶段与游戏服务器交互,因此客户端将保留在离线场景中,直到身份验证完成。
持久化数据
NetworkConnection中有authenticationData属性,可在身服务器或客户端的身份验证中设置所有你需要的属性,如:账户ID、令牌、字符、等。该数据在Mirror中的地方都可用。
内置身份验证器(Built-in Authenticators)
Basic Authenticator :
Deveice Authenticator: 使用 SystemInfo.deviceUniqueIdentifier 在支持的平台使用,并在PlayerPrefs中使用GUID作为不支持的后备方案
自定义身份验证器(Custom Authenticators)
身份验证器的一个派生至抽象类Authenticator,允许你自行实现所需要的身份验证。
在资源菜单中,点击 Create > Mirror > Network Authenticator 自定义你的身份管理器。
消息注册
默认情况下所有消息都注册到NetworkServer和NetworkClient中,除非另外声明,否则需要身份验证。
你需要设置参数NetworkServer.RegisterHandler(OnAuthRequestMessage,false)
某些内部消息已设置绕过身份验证:
服务器:NetworkPingMessage
客户端:SceneMessage、NetworkPongMessage

BasicAuthenticator(基本身份验证器)
Mirror在Mirror/Authenticators包含一个基本身份验证器,它只使用一个简单的用户名和密码。
使用方式:
将 BasicAuthenticator脚本拖动到场景中具有NetworkManager的对象上
BasicAuthenticator将自动分配给NetworkManager中的Authenticator中。
在这里插入图片描述
在这里插入图片描述

Device Authenticator(设备身份验证器)
设备身份验证器使用SystemInfo.deviceUniqueIdentifier 进行客户端标识。


三、Network Behaviour(网络行为管理器)

在多Network Behaviour需要和Network Identity组件一起工作,脚本中可以执行API函数如Commands,ClientRec’s,和SyncVars.
DontDestroyOnLoad 不要放在Awake中,可以使用Start代替。

在Mirror系统中,服务器必须使用带有Network Identity组件的游戏对象,以这种方式赋值及链接。 NetworkServer.Spawn netId
这不是一个可以直接添加的组件,你需要创建一个集成,然后你可以将你创建的脚本作为组件添加到游戏对象中。

参数接口:
isServe(包括专用/主机服务器) :
如果此游戏对象在服务器端中运行则返回 true
isServerOnly:
如果此游戏对象在专用服务器上运行则返回true
isClient:
如果此游戏对象在客户端中运行返回true
IsLocalPlayer:
当前游戏对象为本地客户端则为true , 注意:这里特指NetworkManager 组件中PlayerObject下PlayerPrefab插槽中的对像。代码动态生成无效。
isOwned(formerly):
该游戏对象在客户端中有访问权限则返回true
netID:
由服务分配的网络唯一标识符号,这是它在网络对像字典表NetworkIdentity.spawned中的定位标识符。
netIdentity:
返回该对象的网络标识
connectionToServer:
仅提供给isLocalPlayer为true 的本地玩家,得到本地客户端与服务器间的连接通道。
connectionToClient:
网络连接与附加服务到这个游戏对象的网络标识关联。这对于服务器上分配的特定客户端是有效果的。
提供给某些对象访问,这些对象补要求是被某客户端拥有权限的客户端,得到服务器与拥有本对像的客户端之间的连接通道。
hasAuthority:
客户端对此对想是否具有权限,如果有则返回true.
这里权限是指某个客户端对此对象有所有权,能控制它。默认情况下只有isLocalPlayer为true的对象,客户端有所有权。
NetIdentity:
得到此对象的NetIdentity
ComponentIndex:
得到此对象的挂载脚本的组件序号

脚本特性:

1.同步变量 2.网络回调 3.网络和客户端功能 4.发送命令 5.客户端RPC回调 6.网络事件
在这里插入图片描述

网络回调
内置的回调函数,可以在Network Behaviour脚本上被各网络事件用。下面演示的是基本中基类函数,所以你可以在自己的代码中重构他们,像这样:
在这里插入图片描述
内置生命周期函数:
OnStartServer:
在调用此方法时,可以认为服务上所有对象及数据都已构造完成,可以方位。
OnStopServer:
在关闭服务器是会调用此方法:
OnStartClient:
此时客户端对象初始化完毕,适合进行初始化其他脚本。
OnStopClient:
在关闭客户端时会调用此脚本
OnStartLocalPlayer:
在OnStartClient调用后,仅在isLocalPlayer为ture的对像上调用
OnStopLocalPlayer:
在OnStopClient调用后,仅在isLocalPlayer为ture的对像上调用
OnStartAuthority:
在拥有权限后会立即调用此方法,无论是创建时还是后面赋予的,创建时授权收会在OnStartClient前调用。
此时客户端拥有的权限的对象已初始化完整,可以继续初始化别的内容。
当某个物体被服务器批准权限后,在这个客户端上会被调用。
OnStopAuthority:
某个物体被客户端取消权限后,这个客户端会被调用。
需要注意的是,在托管设置中,其中一个客户端同时充当主机和服务器时,两者者在同一个游戏对象上被调用。两个函数对于特定的服务/客户端都很有用。

客户端和服务器属性:
你可以自定义标记Monobehaviour和NetworkBehaviour中的脚本方法,将方法限定在制定客户端或服务器端。
使用[Server][ServerCallback][Client][ClientCallback] 标签

Command(由客户端器调用)
Command是Mirror提供的一种特性,当客户端脚本调用此方法时,服务端的对应对象执行此方法。
即指该方法在服务器上运行,不会在客户端执行。
使用时需要打上标签[Command],并且要求该方法名这Cmd开头。
这隐含了一个条件,即只有属于本客户端的内容才能实现修改。
也可通过使用requiresAuthority参数实现取非,即要求服务器控制除自己以外的客户端。
[Command(requiresAuthority=false)]

Client Rpc(由服务器调用)
ClientRpc是Mirror提供的一种特性,ClientRpc执行从服务器端调用客户端的指令,
当服务器脚本调用此特性[ClientRpc]的方法时,服务器会将此方法发送给所有客户端执行。

TargetRpc(由服务器调用)
当玩家交互时可以获得交互玩家的NetworkIdentity,可以获得目标玩家的NetworkIdentity.connectionToClient.
作为Target的参数,即可发送给目标玩家

SyncVar(由服务器调用)
SyncVar是Mirror提供的一个特性用于数据同步,即当中的一个值发生变化时,同步给所有客户端。
[SyncVar(hook=nameof(SetNum))]
void MyNumChange(int oldNum,int newNum)
当服务端鉴定的MyNumChange一值 发生变化时,将会同步调用所有客户端的SetNum方法,
注意,此方法只能对服务器上的变量进行标注,而通过hook在客户端进行修改


四、Network Discovery(网络发现器)

主要处理中途网络加入的工作
在这里插入图片描述

组件会在现有的LAN上使用UDP广播,使客户端能够找到正运行的服务器端并连接。
当服务器启动时,它会在UDP广播端口上箭筒来自客户端的请求并返回客户端应用于其他端的连接。
可以使用Active Discovery Interval调整查找服务器的频率,必须将服务器寻找事件分配给程序方法,如NetworkDiscoveryHUD的OnDiscoveredServer方法。
NetworkDiscoveryHUD中也会自动分配NetworkDiscovery组件。


五、Network Identity(网络标识)

NetworkIdentity组件是Unity网络顶层API核心组件,用于持有游戏对像在网络上的唯一标识,并使网络可以访问到此对象。
在这里插入图片描述

Server Only : 勾选指Unity公在服务器上生成此对象。
需要注意的是,Mirror不支持嵌套游戏对像上的网络身份,否则将会发生错误,需要确保游戏父级堆栈中只有一个NetworkIdentity.
实例化网络游戏对象
Mirror使用服务器网络授权系统,服务必须生且有身份的网络对象,使用NetworkServer.Spawn.你需要在预制体上放NetworkIdentity让对象可以在网络系统中被使用。
基于场景保存网络对象
你也可以网络游戏对象保存为场景的一部分,如环境道具, 网络游戏对象使它们的行为略有不同,因为你需要让它们在网络中生成。
在构建游戏时,Unity会禁用场景中所有具有NetworkIdentity的游戏对象。当连接到服务器时,服务会发送消息通知客户端场景游戏对像的信息及最新状态。
这可以确保客户端的游戏在开始播放时不会包含错误的游戏信息
预览窗口信息
此组件包含了网络工作的跟踪信息。
在这里插入图片描述
运行时将会显示更详细的信息
在这里插入图片描述


六、Network Manager(网络管理员)

NetworkManager是用于管理多人游戏的网络方面的组件。它将许多功能封装到一个地方,使得创建,运行和调试多人游戏尽可能的简单。
包含功能:
1.游戏状态管理
2.生产管理
3.场景管理
4.调试信息
5.定制

Network Manager入门
Network Manager是多人游戏的和核心组件,从Mirror附带模板脚本。
在这里插入图片描述

每一个场景中只能有一个Network Manager ,因为他是单例,不要将Network Manager组件放置在联网的游戏对像上,如有Network Identity组件的对像上,因为Mirror在场景加载时会禁用这些。

如果你很熟悉多人游戏开发了,会发现Network Manager完全使用API很有用,你可以通过这一脚本获得一切。对于高级用户你会发现需要扩张NetworkManager组件功能,可以从NetworkManager派生出自己的内容。
网络传输
Mirror使用一个单独的组件(派生自Transport类)进行通信。默认情况 下,它是TelepathyTransport。
游戏状态管理
网络游戏可以三种模式运动,1.为客户端 2.专用服务器 3.服务器和客户端主机
如果你使用NetworkManager HUD,它会更具玩家单击的按钮自动告诉模拟器以什么方式启动。如果你自己写则需要自己调用它,代码是
NetworkManager.StartClient
NetworkManager.StartServer
NetworkManager.StartCHost
在这里插入图片描述

游戏开始都需要指定网络地址和端口号
客户端模式下,游戏会尝试连接到指定地址和端口。
服务器或主机模式下,游戏监听传入连接,其中包括服务器计算机的本地网络IP地址
生产管理:
多数游戏都有个代表玩家的预制体,因此NetworkManager准备了一个PlayerPrefab插槽。设置了玩家预制体后,系统会自动从该玩家预支件为每一个用户生成一个玩家对象。
这适用于托管服务器上的本地器和远端播放器,在将其分配到此字段前,你必须将Network Identity分配给Player Prefab。
一旦分配了PlayerPrefab游戏启动后将会生成对象,停止游戏则会销毁。当你作为主机运行游戏,如果你运行游戏的另一个副本,并将其作为客户端连接到本地主机,网络管理器将显示另一个玩家直至客户端停止销毁对象。
除了PlayerPrefab以还必须注册NetworkManager在运行期间需要动态生成的的其他Prefab.
你可以将预制体注册到可以生列表中,通过NetworkClient.RegisterPrefab方法注册。
如果你通过Don’t Destroy On Load 在场景中持久保存NetworkManager,则需要注册所有预制组件,这些组件可以在任意场景中生成。
如果每个进度有独立的NetworkManager,则只需要注册该场景相关的预制体。
Start Position(起始点管理)
默认情况下,NetworkManager将在其定义的Transform的位置和旋转中生活,但PlayerSpawnMethod属性可以控制结合NetworkStartPosition组件选择起始位置。
在这里插入图片描述
选择Random以随机选择startPosition位置生成玩家。
选择RoundRobion循环,以循环列表显示集合中的StartPositions选择位置。
在这里插入图片描述
如果随机或循环模式不你的游戏,你可以用代码自定义。通过NetworkManager.startPositions访问到起始位置,并可以用GetStartPosition,该方法用于OnServerAddPlayer的实现查找起始位置。

场景管理
NetworkManager组件上还有两个用于场景的插槽:离线/在线场景。将场景拖动至此插槽即可激活场景。
在这里插入图片描述

启动服务器或主机时,将加载在线场景,这便成为当前网络场景。连接该服务器的客户端都将加载此场景。此场景名字储存在NetworkSceneName中.
当场景处于激活状态时,可使用游戏状态管理函数进行操作,如(StartHost或StopClient等),可以使用UI或流程进行操作。
场景更改会导致前一个前一个场景的所有游戏对象被销毁。
通常你需要确保NetworkManager在场景之间连续存在,否则网络连接会在场景更改时中断。
为此,组件中勾选Dont Destroy On Load复选框。但也可以考虑在每个场景中使用独立的NetworkManager.
在这里插入图片描述

客制化服务
在NetworkManager类上有一些虚函数,可以通过派生自定义这些函数。在实现这些功能时,请务必注意默认提供的功能。
例如,在OnServerAddPlayer中,必须调用NetworkServer.AddPlayer来激活玩家对像以进行连接。
为了方便使用,Mirror提供了一级脚本模板,其中包含了为您删除的所有覆盖。


七、Network Manager HUD(快速启动工具)

Network Manager HUD (“heads-up display”)是一种快速启动的工具,用于帮助用户快速构建多人游戏,而无需构建游戏中的创建、连接、加载等用户界面。
用户可以在后期再自定义这些界面及控制参数。
要使用Network Manager HUD请将组件添加到具有Network Manager组件的同一场景对像中,或者在场景中创建一个空游戏,然后将NetworkManager HUD组件添加到新游戏对像中。
在这里插入图片描述
ShowGUI (弃用) :
切换运行时是否显示HUD GUI.
OffsetX、OffsetY 设置HUD水平垂直方向偏移的像素.
Network Manager HUD 提供基本功能,让你可以快速开始托管网络游戏,或查找并加入现有游戏,以下是HUD视窗。
在这里插入图片描述

如何使用HUD:
NetManager HUD以服务器 + 客户端模式启动,并显示与托管和加载入多人游戏按钮。
Host(Server + Client)主机服务器
选择主机Host(Server+Client)以本地网络 的主机微分 启动游戏。该客户端即是游戏主机,又是玩家之一。使用inspector中的网络信息部分的信息来托管游戏。
运行后HUD会切换到网络信息简介页面,此时也可以选择Stop来停止游戏。
在这里插入图片描述

当您作为主机启动后,其他玩家可以连接到主机加入。
单机停止按钮可以断开与主机的连接,并回到HUD界面。

Client(客户端)
要连接到Internet上的主机需要设置,文本框中的文本地址。默认是Localhost,这意味着客户端在自己的计算机上查找自己的游戏主机。
还可以指定IPv4 和 IPvv6 地址,或完全使用域名。例如使用game.example.com,以及使用DNS解释名称的传输。点击"Client"以尝试连接到主机地址。
在这里插入图片描述
在测试时,我们可以让地址保持为localhost,然后在本地构建后,同一台计算机中运行多个实例,以此测试交互是否符合预期。

当你想在多台设备上测试你的游戏时,你需要将IP地址放入文本框中.然后需要将IP告知运行客户端的每个人并输入地址。
对于LAN的本地客户端,这是本地IP地址。对于远端客户端,这是主机路由器的WAN IP地址。防火墙规则和端口转发通常需要一台计算机充当主机并接受其他计算机连接,无论它们是在局域网还是互联网上。
可以输入IP地址(如果本机测试,则保留为localhost),然后点击连接。
需要取消连接时点击Stop停止。

ServerOnly(专属服务器)
在这里插入图片描述
点击"ServerOnly"以专属服务器形式启动,不充当游戏客户端。用户无法在游戏上运行,。所有玩家必须对此进行连接进行游戏。专用服务器可以连接的玩家带来更好的性能体验,因为不需要处理本地玩家的游戏。
如果你想托管一个通过Internet连接的游戏,但又想自己保持对服务器的控制。例如防止其中一个客户端作弊,因为只有在服务器有管理游戏,您可以选择此选项。为此,你需要在公共IP地址的计算机上以ServerOnly模式运行游戏。


八、Network Ping Display (Ping展示窗口)

Network Ping Display 组件以OnGUI形式显示客户端的Ping时间。
在这里插入图片描述

Ping时间是(RTT往反延迟时间的移动平均值)。RTT由客户端的和服务器之间的PingMessage/PongMessage计算得出。


九、Network Profiler(性能管理器)

James Frowen维护了一个免费的网络分析器,可以与mirror一起使用。
安装:
访问Mirror Networking Discord。在信息频道中你将学习如何加入github_sponsors频道。
在github_sponsors频道中,固定消息将指导您如何下载分析器。
使用方法
1.在Unity菜单中,点击Window ->Analysis ->Mirror Network Profiler.
2.可以在任何位置停靠查看技能
3.在编辑器中开始你的游戏
4.使用分析器中的"Record"
5.作为主机、客户端或服务器开始你的游戏
6.在顶部的图表将显示传入或传出消息
7.单击图表以选择帧
8.分析器将显示在有关该帧中发送和接收的所有消息的信息
优化宽带:
在大多传输中,总宽带由Count列控制,这是因为每条消息都打包在TCP或UDP帧中,它们具有较大包头。
如果在同一帧中发送多个[Command],请考虑合并为一个[Command]调用
如果你在特定的消息上看到较大的Count数字,请考虑将NetworkProximityChecker添加到您的对像,以便仅查看他而不是整个场景的消息。
如果你每都发送一条消息,请更改你的逻辑,便其在情况有变化的时候才发送。
考虑使用SyncToOwner功能,以便在私人信息发生变化时才收到消息。这可以根据您的游戏减少消耗。
如果有很多数据同步调用[ClientRpc]调用,改为[SyncVar]和同步列表。它们可以减少消息发送的数量,因为他们只会在数值有变化时增量发送,而且有批处理,性能会更好。


十、Network Rigidbody(网络刚体)

网络刚体组件可在整个网络中同步刚体的速度和其他属性。当您有一个刚体需要在所有的客户端或服务器中同步时,这个组件就非常有用了。
具有Network Rigidbody组件必须具有Network Identity 组件,如没有会自动添加。
当对像有一个NetworkTransform以保持位置 和速度 的同步时,Network Rigidbody效果最好。
在这里插入图片描述

默认情况下,Network Rigidbody权限是在服务器上的,除非选中Client Authority.(新版本好像取消了)。客户端权限适用于玩家对像及专门分配 给客户端的非玩家对象,但仅适用于组件。启用该值后更改将从服务端到客户端。
灵敏度(Sensitivity)选项允许您通过网络发送值 之前设置最小值。这有助于最小化网络流量。
对于某些对象可以选择是否同步位置或旋转
Precision可以设置同步的精确度,同时还可以是指Sync Interval来设置同步间隔。


十一、Network lerp Rigidbody(网络插值刚体)

Network lerp rigidbody 目前正在测试阶段,请谨慎使用。
Network Lerp Rigidbody 组件通过网络同步刚体的位置 和速度。
当你有一个非运动学刚体,有恒定力(如重力)施加在它身上时,这个组件是有用的。
Network Lerp Rigidbody组件必须具有Network Identity,组件上不应该有Network Transform,因为Network Lerp Rigidbody将处理同步位置 。
默认情况下Network Lerp Rigidbody的权限在服务器上,也可以通过选择放给客户端。


十二、Network Room Manager(网络房间管理员)

Network Room Manager是一个专门的网络管理器,在进入游戏扩要场景之前提供一个多人的房间。它允许你家里一个有以下网络的网络:
1.最大于家限制
2.当所有玩家都准备好时自动开始
3.开始游戏后锁定房间,防止迟到者进入
4.玩家在房间内选择定制游戏方式

Room Player Prefab
1.每个玩家一个
2.在客户端连接或添加player时创建
3.持续客户端断开连接
4.保存就绪标志和配置数据
5.处理房间内的命令
6.必须使用Network Room Player组件

PlayerPrefab
1.每个玩家一个
2.游戏场景开始时创建
3.离开游戏场景时销毁
4.处理游戏中的命令

属性介绍:

  1. Show Room GUI : 显示房间的默认OnGUI控件。
    2.Min Players : 开始游戏所需要的最少人数。
    3.Room Player Prefab : 玩家进入房间时为他们创建的预预支体。
    4.Room Scene : 用于房间的场景 。
    5.Gameplay Scene : 用于主游戏的场景。
    6.pendingPlayers : 包含准备开始游戏的玩家列表。
    7.roomSlots : 管理房间中已连接客户端的插槽的列表。
    8.allPlayersReady : 选项,是否所有玩家都准备好开始游戏。当玩家调用CmdChangeReadyState指示真或假时,此值会发生变化。

十三、Network Room Player (房间玩家管理)

Network Room player 在游戏房间中(Network Room Manager)储存每个玩家的状态.使用此组件时,你还需要编写一个脚本,该脚本允许玩家操作他们已准备好游戏。
具有Network Room Player 组件的游戏对像还必须具有Network Identity组件。
在这里插入图片描述

Show Room GUI : 启用此选项可以为聊天室中的玩家显示开发人员GUI.此UI仅用于简化开发。默认此功能处于开启状态。
Ready To Begin : 玩家已准备就绪的诊断指示器。
Index : 玩家的诊断索引,例如玩家1玩家2等
Network Sync Interval : 将信息坐Network Room Player 发送到服务器的频率
虚拟方法:
客户端虚拟 SyncVar 挂钩方法:
public virtual void IndexChanged(int oldIndex, int newIndex) { }
public virtual void ReadyStateChanged(bool oldReadyState, bool newReadyState) { }
客户端虚拟方法:
public virtual void OnClientEnterRoom() { }
public virtual void OnClientExitRoom() { }
[Obsolete(“OnClientReady is deprecated, use the SyncVar ReadyStateChanged hook instead.”)]
public virtual void OnClientReady(bool readyState) {}


十四、Network Start Position(玩家起始点)

游戏中可以使用Network Start Position组件控制玩家生成位置。
要使用此组件,需要将Network Start Position组件添加到场景中的游戏对象,并将游戏对象放在需要玩家出生的位置。
您可以根据需要添加多个Network Start Position。Network Manager会检查场景中所有的起始位置,当它生成每个玩家实例时,它会使用其中一个的位置方向信息。
默认情况下,Network Manager将在原始点生成玩家,添加此组件后将自动注册、注销到网络管理器,作为可用的生成位置。
根据Network Manager 中PlayerSpawn方法可以选择随机或循环使用位置信息生成玩家。
在这里插入图片描述


十五、Network Statistics(网络信息统计)

Network Statistics组件 显示美妙发送和接受的消息和字节数。
将此组件添加到Network Manager 对像上(或在线场景中的任何对象)
在这里插入图片描述


十六、Network Transform

Network Transform 组件事在同步网络上游戏对像的位置、旋转和缩放。
在这里插入图片描述

Mirror目前提供两种版本的Network Transform:
Reliable(可靠的): 低带宽,与Rpcs/Cmds/等延迟相同。
Unreliable(不可靠的): 高带宽,极低延迟。
Network Transform组件的游戏必须具有Network Identity 组件。
默认情况下Network Transform组件权限在服务,除非将"Sync Direction"更改为"Clinet To Server"。
客户端权限适用于玩家对像以及专门分配给客户端的非玩家 对象,但公适用于此组件。
启用此功能后,位置更改将从客户端发送到服务器端。
可以设置Sync Interval 来改变同步间隔。
延迟、数据丢失和抖动期间的平滑
NetworkTransform每间隔一段时间发送更新位置在Unrliable.
在网络不理想时,将可能出现乱序、延迟、丢包等情况。
在此情况下的游戏平滑是网络游戏中的难题之一。组件通过使用Snapshot Interpolation(快照插值)。
简而言之,通过缓冲在非理想条件下的平衡运动实现的。第件越差换冲时间乘数就越高。但是它越高,缓冲时间就越长。
总缓冲时间由是3的倍数。SendInterval * Buffer Time Multiplier.


十七、荒废的插件

Network Proximity Checker
Network Scene Checker
Network Match Checker
Network Owner Checker

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值