弃用功能
Unity Networking (UNet) 的某些功能已从 Mirror 中移除或修改,原因各不相同。本页面将识别所有已更改和移除的功能、属性和方法,变更或移除的原因,以及可能的替代方案。
匹配命名空间和主机迁移
作为 Unity 服务的一部分,整个命名空间已被移除。一开始就不太好用,并且作为核心网络包的一部分非常复杂。我们预计,这个命名空间以及其他后端服务将通过独立应用程序提供,这些应用程序与 Mirror 集成。
简化网络服务器
这个功能过于复杂且难以维护,所以被移除。有更简单的方法来创建基本的监听服务器,无论是否使用我们的传输方式。
本地合作
通过移除这个低 hanging fruit,核心网络功能得到了极大简化。这个功能存在 bug,并且过于复杂,不值得修复。对于那些需要类似功能的人,考虑将一个不可见的玩家预制体定义为消息导管,用于生成具有客户端权限的实际玩家预制体。所有输入将通过导管预制体路由到控制玩家对象。
消息类型
MsgType 枚举已被移除。所有消息类型都是动态生成的。请使用 Send 代替。
网络变换
网络变换 已完全替换,现在只同步位置、旋转和缩放,具有这些控制选项以及是否插值它们,并使用快照插值。它还有一堆虚拟方法,还有一个用于创建自己的派生版本的脚本模板。刚体支持已被移除,取而代之的是单独的网络刚体 组件。
网络动画器(Network Animator)
网络动画器(Network Animator)也进行了简化,因为它将所有动画器参数批量处理为单个更新消息。
SyncVar 钩子参数(SyncVar Hook Parameters)
SyncVar 属性值现在在调用钩子之前更新,并且钩子现在需要两个与属性相同类型的参数:oldValue 和 newValue。
SyncListSTRUCT
请使用SyncList。
SyncList 类
SyncListString被替换为SyncList<string>。SyncListFloat被替换为SyncList<float>。SyncListInt被替换为SyncList<int>。SyncListUInt被替换为SyncList<uint>。SyncListBool被替换为SyncList<bool>。
查看文档以获取更多详细信息。
SyncList 操作
OP_REMOVE被替换为OP_REMOVEAT。OP_DIRTY被替换为OP_SET。
查看文档以获取更多详细信息。
SyncDictionary 操作
OP_DIRTY被替换为OP_SET。
查看文档以获取更多详细信息。
SyncObject
现在是一个类而不是一个接口。
Flush- 使用ClearChanges代替。
服务质量标志(Quality of Service Flags)
在经典 UNet 中,QoS 标志用于确定数据包如何到达远程端。例如,如果您需要一个数据包在队列中优先处理,您可以指定一个高优先级标志,然后 Unity LLAPI 将接收并适当处理。不幸的是,这给传输层带来了很多额外工作,并且一些 QoS 标志由于依赖过多魔法的错误代码而无法按预期工作。
在 Mirror 中,QoS 标志被替换为了一个“Channels”系统。虽然默认传输方式 Telepathy 不使用任何通道,因为它基于 TCP,但其他传输方式,比如 Ignorance 和 LiteNetLib,支持通道。
当前定义的通道包括:
Channels.Reliable = 0(可靠通道)Channels.Unreliable = 1(不可靠通道)
按类别的更改
NetworkManager
在许多地方,
NetworkConnection被替换为了NetworkConnectionToClient。networkPort已移除,作为将传输方式分离为组件的一部分。并非所有传输方式都使用端口,但那些使用端口的传输方式有相应的字段。查看 Transports 获取更多信息。IsHeadless()使用编译符号UNITY_SERVER代替。ConfigureServerFrameRate被重命名为ConfigureHeadlessFrameRate。client直接使用 NetworkClient,它很快将被设为静态。例如,使用NetworkClient.Send(message)而不是NetworkManager.client.Send(message)。IsClientConnected()使用静态属性NetworkClient.isConnected代替。onlineScene和offlineScene现在存储完整路径,因此请使用 SceneManager.GetActiveScene().path。OnStartClient(NetworkClient client)改为重写 OnStartClient(),因为所有NetworkClient方法现在都是静态的。OnClientChangeScene(string newSceneName)改为重写OnClientChangeScene(string newSceneName, SceneOperation sceneOperation, bool customHandling)。OnClientChangeScene(string newSceneName, SceneOperation sceneOperation)改为重写OnClientChangeScene(string newSceneName, SceneOperation sceneOperation, bool customHandling)。OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage)改为重写OnServerAddPlayer(NetworkConnection conn)。查看 自定义玩家生成指南 获取详细信息。OnServerRemovePlayer(NetworkConnection conn, NetworkIdentity player)使用NetworkServer.RemovePlayerForConnection(NetworkConnection conn, GameObject player, bool keepAuthority = false)代替。OnServerError(NetworkConnection conn, int errorCode)用
OnServerError(NetworkConnection conn, Exception exception)替换。
NetworkManagerHUD
移除了
showGUI。禁用组件即可。
NetworkRoomManager
在许多地方,
NetworkConnection被替换为NetworkConnectionToClient。OnRoomServerCreateGamePlayer(NetworkConnection conn)使用OnRoomServerCreateGamePlayer(NetworkConnection conn, GameObject roomPlayer)替代。OnRoomServerSceneLoadedForPlayer(GameObject roomPlayer, GameObject gamePlayer)使用OnRoomServerSceneLoadedForPlayer(NetworkConnection conn, GameObject roomPlayer, GameObject gamePlayer)替代。客户端虚方法不再需要
NetworkConnection参数。在你的重写中使用
NetworkClient.connection。
NetworkIdentity
clientAuthorityOwner使用connectionToClient代替GetSceneIdenity使用GetSceneIdentity代替(原名称中有拼写错误)RemoveClientAuthority(NetworkConnection conn)不再需要NetworkConnection参数,也不返回任何内容spawned字典已拆分为
NetworkServer.spawned和NetworkClient.spawned字典。本地玩家权限复选框 不再需要此复选框,我们简化了 Mirror 中 Authority 的工作方式。
NetworkBehaviour
在许多地方,
NetworkConnection被替换为NetworkConnectionToClient。sendInterval属性 使用NetworkBehaviour.syncInterval字段代替。也可以在检查器中进行修改。List m_SyncObjects使用List syncObjects代替。OnSetLocalVisibility(bool visible)改为重写OnSetHostVisibility(bool visible)。OnRebuildObservers、OnCheckObserver和OnSetHostVisibility移至名为NetworkVisibility的单独类。NetworkBehaviour.OnNetworkDestroy重命名为NetworkBehaviour.OnStopClient。getSyncVarHookGuard重命名为GetSyncVarHookGuard。setSyncVarHookGuard- 重命名为SetSyncVarHookGuard。SetDirtyBit- 使用SetSyncVarDirtyBit代替。[Command]属性参数ignoreAuthority替换为requiresAuthority。[ClientRpc]属性参数includeOwner替换为excludeOwner。hasAuthority重命名为isOwned。
NetworkConnection
hostId因为自从我们移除了 LLAPI 作为默认选项后就不再需要了。对于常规连接,它始终为 0,对于本地连接则为 -1。使用connection.GetType() == typeof(NetworkConnection)来检查是常规连接还是本地连接。isConnected因为毫无意义而被移除。NetworkConnection总是连接的。InvokeHandlerNoData(int msgType)改用InvokeHandler。playerController重命名为identity,因为它就是:连接的NetworkIdentity。RegisterHandler(short msgType, NetworkMessageDelegate handler)改用NetworkServer.RegisterHandler()或NetworkClient.RegisterHandler()。UnregisterHandler(short msgType)改用NetworkServer.UnregisterHandler()或NetworkClient.UnregisterHandler()。Send(int msgType, MessageBase msg, int channelId = Channels.Reliable)改用Send(msg, channelId)。
NetworkServer
NetworkConnection在许多地方被替换为NetworkConnectionToClient。FindLocalObject(uint netId)改用NetworkServer.spawned[netId].gameObject。RegisterHandler(int msgType, NetworkMessageDelegate handler)改用RegisterHandler(T msg)。RegisterHandler(MsgType msgType, NetworkMessageDelegate handler)改用RegisterHandler(T msg)。RegisterHandler(Action handler, bool requireAuthentication = true)改用
RegisterHandler(Action<NetworkConnection, T), requireAuthentication = true)。UnregisterHandler(int msgType)改用UnregisterHandler(T msg)。UnregisterHandler(MsgType msgType)改用UnregisterHandler(T msg)。SendToAll(int msgType, MessageBase msg, int channelId = Channels.Reliable)改用SendToAll(T msg, int channelId = Channels.Reliable)。SendToClient(int connectionId, int msgType, MessageBase msg)改用NetworkConnection.Send(T msg, int channelId = Channels.Reliable)。SendToClient(int connectionId, T msg)改用NetworkConnection.Send(T msg, int channelId = Channels.Reliable)。SendToClientOfPlayer(NetworkIdentity identity, int msgType, MessageBase msg)改用identity.connectionToClient.Send<T>(T message, int channelId = Channels.Reliable)。SendToReady(NetworkIdentity identity, short msgType, MessageBase msg, int channelId = Channels.Reliable)改用identity.connectionToClient.Send()。SendToReady(NetworkIdentity identity, T message, bool includeOwner = true, int channelId = Channels.Reliable)已更名为
SendToReadyObservers。
NetworkClient
NetworkClient singleton直接使用NetworkClient。不再需要 Singleton,因为所有函数现在都是静态的。 示例:使用NetworkClient.Send(message)而不是NetworkClient.singleton.Send(message)。allClients直接使用NetworkClient。始终只有一个客户端。GetRTT()改用NetworkTime.rtt。readyConnection改用
connection。isLocalClient改用
isHostClient。DisconnectLocalServer()改用
NetworkClient.Disconnect()。RegisterHandler(int msgType, NetworkMessageDelegate handler)改用RegisterHandler(T msg)。RegisterHandler(MsgType msgType, NetworkMessageDelegate handler)改用RegisterHandler(T msg)。RegisterHandler(Action<NetworkConnection, T> handler, bool requireAuthentication = true)改用
RegisterHandler(Action<T> handler, bool requireAuthentication = true)。UnregisterHandler(int msgType)改用UnregisterHandler(T msg)。UnregisterHandler(MsgType msgType)改用UnregisterHandler(T msg)。Ready(NetworkConnection conn)
使用 Ready() 而不带 NetworkConnection 参数。
Send(short msgType, MessageBase msg)使用Send(T msg, int channelId = Channels.Reliable)而不带消息 id。ShutdownAll()使用Shutdown()。只有一个客户端。OnError更名为OnTransportError以增加清晰度。
ClientScene
已合并到
NetworkClient。
Network Scene Checker
已被 场景兴趣管理 取代。
Network Proximity Checker
Network Match Checker
已被 Network Match 取代,并需要 匹配兴趣管理。
Network Owner Checker
已被 Network Team 取代,并需要 团队兴趣管理。
Network Authenticator
NetworkConnection在许多地方被NetworkConnectionToClient取代。OnClientAuthenticate不再接受NetworkConnection参数。 需要时请使用NetworkClient.connection。OnClientAuthenticated事件不再接受NetworkConnection参数。 需要时请使用NetworkClient.connection。在客户端消息处理程序中不再使用
NetworkConnection。请在处理程序中使用
NetworkClient.connection。ClientAccept和ClientReject不再需要NetworkConnection参数。
NetworkTime
NetworkTime.timeVar更名为timeVariance。NetworkTime.timeSd更名为timeStandardDeviation。NetworkTime.rttVar更名为rttVariance。NetworkTime.rttSd更名为rttStandardDeviation。
Transport
activeTransport更名为active。
Messages
基本的简单类型消息都被移除,因为它们是多余的。您可以自己创建消息类。
StringMessageByteMessageBytesMessageIntegerMessageDoubleMessageEmptyMessage
NetworkMessage 需要在所有情况下使用结构体 - 不再支持类
NetworkReader
Read(byte[] buffer, int offset, int count)使用ReadBytes代替。ReadPackedInt32(int value)使用ReadInt32(int value)代替。ReadPackedUInt32(uint value)使用ReadUInt32(uint value)代替。ReadPackedUInt64(ulong value)使用ReadUInt64(ulong value)代替。ReadBoolean重命名为ReadBool。ReadInt16重命名为ReadShort。ReadInt32重命名为ReadInt。Readint64重命名为ReadLong。ReadSingle重命名为ReadFloat。
NetworkWriter
Write(bool value)使用WriteBool代替。Write(byte value)使用WriteByte代替。Write(sbyte value)使用WriteSByte代替。Write(short value)使用WriteShort代替。Write(ushort value)使用WriteUShort代替。Write(int value)使用WriteInt代替。Write(uint value)使用WriteUInt代替。Write(long value)使用WriteLong代替。Write(ulong value)使用WriteULong代替。Write(float value)使用WriteFloat代替。Write(double value)使用WriteDouble代替。Write(decimal value)使用WriteDecimal代替。Write(string value)使用WriteString代替。Write(char value)使用WriteChar代替。Write(Vector2 value)使用WriteVector2代替。Write(Vector2Int value)使用WriteVector2Int代替。Write(Vector3 value)使用WriteVector3代替。Write(Vector3Int value)使用WriteVector3Int代替。Write(Vector4 value)使用WriteVector4代替。Write(Color value)使用WriteColor代替。Write(Color32 value)使用WriteColor32代替。Write(Guid value)使用WriteGuid代替。Write(Transform value)使用WriteTransform代替。Write(Quaternion value)使用WriteQuaternion代替。Write(Rect value)使用WriteRect代替。Write(Plane value)使用WritePlane代替。Write(Ray value)使用WriteRay代替。Write(Matrix4x4 value)使用WriteMatrix4x4代替。Write(NetworkIdentity value)使用WriteNetworkIdentity代替。Write(GameObject value)使用WriteGameObject代替。Write(byte[] buffer, int offset, int count)使用WriteBytes代替。WritePackedInt32(int value)使用WriteInt32(int value)代替WritePackedUInt32(uint value)使用WriteUInt32(uint value)代替WritePackedUInt64(ulong value)使用WriteUInt64(ulong value)代替
RemoteCallHelper
已重命名为
RemoteProcedureCalls(远程过程调用)。CmdDelegate(命令委托)已重命名为RemoteCallDelegate(远程调用委托)。MirrorInvokeType(Mirror 调用类型)已重命名为RemoteCallType(远程调用类型)。
Transport
GetConnectionInfo(int connectionId, out string address)改用ServerGetClientAddress(int connectionId)(服务器获取客户端地址)。GetMaxBatchSize(获取最大批处理大小)已重命名为GetMaxPacketSize(获取最大数据包大小)。ClientSend(int channelId, ArraySegment segment)改用
ClientSend(segment, channelId)(客户端发送)。ServerSend(int connectionId, int channelId, ArraySegment segment)改用
ServerSend(connectionId, segment, channelId)(服务器发送)。
Telepathy Transport
MaxMessageSize(最大消息大小) 改用MaxMessageSizeFromClient(来自客户端的最大消息大小)或MaxMessageSizeFromServer(来自服务器的最大消息大小)。
Fallback Transport
已移除。
Utils
Version(版本)枚举已移除。DefaultReliable(默认可靠)已重命名为Reliable(可靠)。DefaultUnreliable(默认不可靠)已重命名为Unreliable(不可靠)。
最后更新于
这有帮助吗?