void FixedUpdate() { if (!sendMessagesAllowed) { return; } CheckSendRate(); int stateHash; float normalizedTime; if (!CheckAnimStateChanged(out stateHash, out normalizedTime)) { 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); }
// ------------------ server message handlers ------------------- internal static void OnAnimationServerMessage(NetworkMessage netMsg) { AnimationMessage msg = new AnimationMessage(); netMsg.ReadMessage(msg); if (LogFilter.logDev) { Debug.Log("OnAnimationMessage for netId=" + msg.netId + " conn=" + netMsg.conn); } GameObject go = NetworkServer.FindLocalObject(msg.netId); if (go == null) { return; } NetworkAnimator animSync = go.GetComponent <NetworkAnimator>(); if (animSync != null) { NetworkReader reader = new NetworkReader(msg.parameters); animSync.HandleAnimMsg(msg, reader); NetworkServer.SendToReady(go, (short)MsgType.Animation, msg); } }
internal void HandleAnimMsg(AnimationMessage msg, NetworkReader reader) { if (hasAuthority) { return; } // 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) { m_Animator.Play(msg.stateHash, 0, msg.normalizedTime); } ReadParameters(reader, false); }
// ------------------ client message handlers ------------------- internal static void OnAnimationClientMessage(NetworkMessage netMsg) { AnimationMessage msg = netMsg.ReadMessage <AnimationMessage>(); GameObject go = ClientScene.FindLocalObject(msg.netId); if (go == null) { return; } var animSync = go.GetComponent <NetworkAnimator>(); if (animSync != null) { var reader = new NetworkReader(msg.parameters); animSync.HandleAnimMsg(msg, reader); } }