private void FixedUpdate()
        {
            // If this is a client store and send the current polled input for processing
            if (!networkObject.IsServer)
            {
                _frameNumber++;

                // Only send the input if it has buttons pressed or has changed from the previous input state
                if (_inputFrame != null && (_inputFrame.HasInput || _lastInputFrame == null || _inputFrame != _lastInputFrame))
                {
                    _inputFrame.frameNumber = _frameNumber;

                    if (networkObject.IsOwner)
                    {
                        _framesToSend.Add(_inputFrame);
                        FramesToPlay.Add(_inputFrame);
                        FramesToReconcile.Add(_inputFrame);
                    }
                }

                // Send the input(s) if needed
                // I added an option to use the frame sync rate and send a List or
                // send every input and only send InputFrames
                if (_framesToSend.Count > 0 && (sendSingleInputs || _frameNumber % frameSyncRate == 0))
                {
                    byte[] bytes = {};
                    if (sendSingleInputs)
                    {
                        bytes = ByteArrayUtilities.ObjectToByteArray(_framesToSend[0]);
                    }
                    else
                    {
                        bytes = ByteArrayUtilities.ObjectToByteArray(_framesToSend);
                    }

                    networkObject.SendRpc(RPC_SYNC_INPUTS, Receivers.Server, new object[] { bytes });

                    if (sendSingleInputs)
                    {
                        _framesToSend.RemoveAt(0);
                    }
                    else
                    {
                        _framesToSend.Clear();
                    }
                }
            }
        }
 // RPC for receiving InputFrames from the clients
 public override void SyncInputs(RpcArgs args)
 {
     if (networkObject.IsServer)
     {
         var bytes = args.GetNext <Byte[]>();
         if (sendSingleInputs)
         {
             InputFrame nextInputFrame = (InputFrame)ByteArrayUtilities.ByteArrayToObject(bytes);
             FramesToPlay.Add(nextInputFrame);
         }
         else
         {
             List <InputFrame> networkInputFrames = (List <InputFrame>)ByteArrayUtilities.ByteArrayToObject(bytes);
             FramesToPlay.AddRange(networkInputFrames);
         }
     }
 }