diff --git a/Assets/Mirror/Runtime/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs similarity index 66% rename from Assets/Mirror/Runtime/NetworkAnimator.cs rename to Assets/Mirror/Components/NetworkAnimator.cs index 6e0a52c5a..57cf96f1f 100644 --- a/Assets/Mirror/Runtime/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -96,16 +96,10 @@ void FixedUpdate() return; } - var animMsg = new AnimationMessage(); - animMsg.netId = netId; - animMsg.stateHash = stateHash; - animMsg.normalizedTime = normalizedTime; - NetworkWriter writer = new NetworkWriter(); WriteParameters(writer, false); - animMsg.parameters = writer.ToArray(); - SendMessage((short)MsgType.Animation, animMsg); + SendAnimationMessage(stateHash, normalizedTime, writer.ToArray()); } bool CheckAnimStateChanged(out int stateHash, out float normalizedTime) @@ -149,29 +143,34 @@ void CheckSendRate() { m_SendTimer = Time.time + syncInterval; - var animMsg = new AnimationParametersMessage(); - animMsg.netId = netId; - NetworkWriter writer = new NetworkWriter(); WriteParameters(writer, true); - animMsg.parameters = writer.ToArray(); - SendMessage((short)MsgType.AnimationParameters, animMsg); + SendAnimationParametersMessage(writer.ToArray()); } } - void SendMessage(short type, MessageBase msg) + void SendAnimationMessage(int stateHash, float normalizedTime, byte[] parameters) { if (isServer) { - NetworkServer.SendToReady(gameObject, type, msg); + RpcOnAnimationClientMessage(stateHash, normalizedTime, parameters); } - else + else if (ClientScene.readyConnection != null) { - if (ClientScene.readyConnection != null) - { - ClientScene.readyConnection.Send(type, msg); - } + CmdOnAnimationServerMessage(stateHash, normalizedTime, parameters); + } + } + + void SendAnimationParametersMessage(byte[] parameters) + { + if (isServer) + { + RpcOnAnimationParametersClientMessage(parameters); + } + else if (ClientScene.readyConnection != null) + { + CmdOnAnimationParametersServerMessage(parameters); } } @@ -197,7 +196,7 @@ void SetRecvTrackingParam(string p, int i) if (i == 5) param5 = p; } - internal void HandleAnimMsg(AnimationMessage msg, NetworkReader reader) + internal void HandleAnimMsg(int stateHash, float normalizedTime, NetworkReader reader) { if (hasAuthority) return; @@ -205,15 +204,15 @@ internal void HandleAnimMsg(AnimationMessage msg, NetworkReader reader) // usually transitions will be triggered by parameters, if not, play anims directly. // NOTE: this plays "animations", not transitions, so any transitions will be skipped. // NOTE: there is no API to play a transition(?) - if (msg.stateHash != 0) + if (stateHash != 0) { - m_Animator.Play(msg.stateHash, 0, msg.normalizedTime); + m_Animator.Play(stateHash, 0, normalizedTime); } ReadParameters(reader, false); } - internal void HandleAnimParamsMsg(AnimationParametersMessage msg, NetworkReader reader) + internal void HandleAnimParamsMsg(NetworkReader reader) { if (hasAuthority) return; @@ -332,140 +331,67 @@ public void SetTrigger(string triggerName) public void SetTrigger(int hash) { - var animMsg = new AnimationTriggerMessage(); - animMsg.netId = netId; - animMsg.hash = hash; - if (hasAuthority && localPlayerAuthority) { - if (NetworkClient.allClients.Count > 0) + if (NetworkClient.allClients.Count > 0 && ClientScene.readyConnection != null) { - var client = ClientScene.readyConnection; - if (client != null) - { - client.Send((short)MsgType.AnimationTrigger, animMsg); - } + CmdOnAnimationTriggerServerMessage(hash); } return; } if (isServer && !localPlayerAuthority) { - NetworkServer.SendToReady(gameObject, (short)MsgType.AnimationTrigger, animMsg); + RpcOnAnimationTriggerClientMessage(hash); } } // ------------------ server message handlers ------------------- - internal static void OnAnimationServerMessage(NetworkMessage netMsg) + [Command] + void CmdOnAnimationServerMessage(int stateHash, float normalizedTime, byte[] parameters) { - AnimationMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("OnAnimationMessage for netId=" + msg.netId + " conn=" + netMsg.conn); } + if (LogFilter.Debug) { Debug.Log("OnAnimationMessage for netId=" + netId); } - GameObject go = NetworkServer.FindLocalObject(msg.netId); - if (go == null) - { - return; - } - NetworkAnimator animSync = go.GetComponent(); - if (animSync != null) - { - NetworkReader reader = new NetworkReader(msg.parameters); - animSync.HandleAnimMsg(msg, reader); - - NetworkServer.SendToReady(go, (short)MsgType.Animation, msg); - } + // handle and broadcast + HandleAnimMsg(stateHash, normalizedTime, new NetworkReader(parameters)); + RpcOnAnimationClientMessage(stateHash, normalizedTime, parameters); } - internal static void OnAnimationParametersServerMessage(NetworkMessage netMsg) + [Command] + void CmdOnAnimationParametersServerMessage(byte[] parameters) { - AnimationParametersMessage msg = netMsg.ReadMessage(); - - if (LogFilter.Debug) { Debug.Log("OnAnimationParametersMessage for netId=" + msg.netId + " conn=" + netMsg.conn); } - - GameObject go = NetworkServer.FindLocalObject(msg.netId); - if (go == null) - { - return; - } - NetworkAnimator animSync = go.GetComponent(); - if (animSync != null) - { - NetworkReader reader = new NetworkReader(msg.parameters); - animSync.HandleAnimParamsMsg(msg, reader); - NetworkServer.SendToReady(go, (short)MsgType.AnimationParameters, msg); - } + // handle and broadcast + HandleAnimParamsMsg(new NetworkReader(parameters)); + RpcOnAnimationParametersClientMessage(parameters); } - internal static void OnAnimationTriggerServerMessage(NetworkMessage netMsg) + [Command] + void CmdOnAnimationTriggerServerMessage(int hash) { - AnimationTriggerMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("OnAnimationTriggerMessage for netId=" + msg.netId + " conn=" + netMsg.conn); } - - GameObject go = NetworkServer.FindLocalObject(msg.netId); - if (go == null) - { - return; - } - NetworkAnimator animSync = go.GetComponent(); - if (animSync != null) - { - animSync.HandleAnimTriggerMsg(msg.hash); - - NetworkServer.SendToReady(go, (short)MsgType.AnimationTrigger, msg); - } + // handle and broadcast + HandleAnimTriggerMsg(hash); + RpcOnAnimationTriggerClientMessage(hash); } // ------------------ client message handlers ------------------- - - internal static void OnAnimationClientMessage(NetworkMessage netMsg) + [ClientRpc] + void RpcOnAnimationClientMessage(int stateHash, float normalizedTime, byte[] parameters) { - AnimationMessage msg = netMsg.ReadMessage(); - - GameObject go = ClientScene.FindLocalObject(msg.netId); - if (go == null) - { - return; - } - var animSync = go.GetComponent(); - if (animSync != null) - { - var reader = new NetworkReader(msg.parameters); - animSync.HandleAnimMsg(msg, reader); - } + HandleAnimMsg(stateHash, normalizedTime, new NetworkReader(parameters)); } - internal static void OnAnimationParametersClientMessage(NetworkMessage netMsg) + [ClientRpc] + void RpcOnAnimationParametersClientMessage(byte[] parameters) { - AnimationParametersMessage msg = netMsg.ReadMessage(); - - GameObject go = ClientScene.FindLocalObject(msg.netId); - if (go == null) - { - return; - } - var animSync = go.GetComponent(); - if (animSync != null) - { - var reader = new NetworkReader(msg.parameters); - animSync.HandleAnimParamsMsg(msg, reader); - } + HandleAnimParamsMsg(new NetworkReader(parameters)); } - internal static void OnAnimationTriggerClientMessage(NetworkMessage netMsg) + // server sends this to one client + [ClientRpc] + void RpcOnAnimationTriggerClientMessage(int hash) { - AnimationTriggerMessage msg = netMsg.ReadMessage(); - - GameObject go = ClientScene.FindLocalObject(msg.netId); - if (go == null) - { - return; - } - var animSync = go.GetComponent(); - if (animSync != null) - { - animSync.HandleAnimTriggerMsg(msg.hash); - } + HandleAnimTriggerMsg(hash); } } } diff --git a/Assets/Mirror/Runtime/NetworkAnimator.cs.meta b/Assets/Mirror/Components/NetworkAnimator.cs.meta similarity index 100% rename from Assets/Mirror/Runtime/NetworkAnimator.cs.meta rename to Assets/Mirror/Components/NetworkAnimator.cs.meta diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 01cb47a90..8419bdca6 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -225,15 +225,12 @@ internal static void RegisterSystemHandlers(NetworkClient client, bool localClie client.RegisterHandler(MsgType.ObjectHide, OnObjectDestroy); client.RegisterHandler(MsgType.UpdateVars, OnUpdateVarsMessage); client.RegisterHandler(MsgType.Owner, OnOwnerMessage); - client.RegisterHandler(MsgType.Animation, NetworkAnimator.OnAnimationClientMessage); - client.RegisterHandler(MsgType.AnimationParameters, NetworkAnimator.OnAnimationParametersClientMessage); client.RegisterHandler(MsgType.LocalClientAuthority, OnClientAuthority); client.RegisterHandler(MsgType.Pong, NetworkTime.OnClientPong); } client.RegisterHandler(MsgType.Rpc, OnRPCMessage); client.RegisterHandler(MsgType.SyncEvent, OnSyncEventMessage); - client.RegisterHandler(MsgType.AnimationTrigger, NetworkAnimator.OnAnimationTriggerClientMessage); } // spawn handlers and prefabs ////////////////////////////////////////// diff --git a/Assets/Mirror/Runtime/Messages.cs b/Assets/Mirror/Runtime/Messages.cs index 7ecad4e43..8de721edc 100644 --- a/Assets/Mirror/Runtime/Messages.cs +++ b/Assets/Mirror/Runtime/Messages.cs @@ -376,66 +376,6 @@ public override void Serialize(NetworkWriter writer) } } - class AnimationMessage : MessageBase - { - public uint netId; - public int stateHash; // if non-zero, then Play() this animation, skipping transitions - public float normalizedTime; - public byte[] parameters; - - public override void Deserialize(NetworkReader reader) - { - netId = reader.ReadPackedUInt32(); - stateHash = (int)reader.ReadPackedUInt32(); - normalizedTime = reader.ReadSingle(); - parameters = reader.ReadBytesAndSize(); - } - - public override void Serialize(NetworkWriter writer) - { - writer.WritePackedUInt32(netId); - writer.WritePackedUInt32((uint)stateHash); - writer.Write(normalizedTime); - writer.WriteBytesAndSize(parameters); - } - } - - class AnimationParametersMessage : MessageBase - { - public uint netId; - public byte[] parameters; - - public override void Deserialize(NetworkReader reader) - { - netId = reader.ReadPackedUInt32(); - parameters = reader.ReadBytesAndSize(); - } - - public override void Serialize(NetworkWriter writer) - { - writer.WritePackedUInt32(netId); - writer.WriteBytesAndSize(parameters); - } - } - - class AnimationTriggerMessage : MessageBase - { - public uint netId; - public int hash; - - public override void Deserialize(NetworkReader reader) - { - netId = reader.ReadPackedUInt32(); - hash = (int)reader.ReadPackedUInt32(); - } - - public override void Serialize(NetworkWriter writer) - { - writer.WritePackedUInt32(netId); - writer.WritePackedUInt32((uint)hash); - } - } - // A client sends this message to the server // to calculate RTT and synchronize time class NetworkPingMessage : DoubleMessage diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index a958b1fdf..04a976e43 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -79,9 +79,6 @@ internal static void RegisterMessageHandlers() RegisterHandler(MsgType.Ready, OnClientReadyMessage); RegisterHandler(MsgType.Command, OnCommandMessage); RegisterHandler(MsgType.RemovePlayer, OnRemovePlayerMessage); - RegisterHandler(MsgType.Animation, NetworkAnimator.OnAnimationServerMessage); - RegisterHandler(MsgType.AnimationParameters, NetworkAnimator.OnAnimationParametersServerMessage); - RegisterHandler(MsgType.AnimationTrigger, NetworkAnimator.OnAnimationTriggerServerMessage); RegisterHandler(MsgType.Ping, NetworkTime.OnServerPing); } diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index bf5dca4ec..5508fc614 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -48,9 +48,6 @@ public enum MsgType : short AddPlayer = 37, RemovePlayer = 38, Scene = 39, - Animation = 40, - AnimationParameters = 41, - AnimationTrigger = 42, // time synchronization Ping = 43,