示例#1
0
    private void LateUpdate()
    {
        // If no keyboard is plugged in, this will be null.
        var keyboard = Keyboard.current;

        if (keyboard != null)
        {
            foreach (var kvp in ParsecInputSystemMapping.Keys)
            {
                if (keyboard[kvp.Value].wasPressedThisFrame || keyboard[kvp.Value].wasReleasedThisFrame)
                {
                    var message = new Parsec.ParsecMessage {
                        type = Parsec.ParsecMessageType.MESSAGE_KEYBOARD
                    };

                    message.keyboard.code    = kvp.Key;
                    message.keyboard.pressed = keyboard[kvp.Value].wasPressedThisFrame;

                    parsec.ClientSendMessage(message);
                }
            }
        }

        // TODO: Mouse button input is currently not being received on the host.
        // If no mouse is plugged in, this will be null.
        var mouse = Mouse.current;

        if (mouse != null)
        {
            if (mouse.leftButton.wasPressedThisFrame || mouse.leftButton.wasReleasedThisFrame)
            {
                var message = new Parsec.ParsecMessage {
                    type = Parsec.ParsecMessageType.MESSAGE_MOUSE_BUTTON
                };

                message.mouseButton.button  = Parsec.ParsecMouseButton.MOUSE_L;
                message.mouseButton.pressed = mouse.leftButton.wasPressedThisFrame;

                parsec.ClientSendMessage(message);
            }

            // Unity stores the deltas as floats, but they are always
            // whole numbers.
            int deltaX = (int)mouse.delta.x.ReadValue();
            int deltaY = (int)mouse.delta.y.ReadValue();

            if (deltaX > 0 || deltaY > 0)
            {
                var message = new Parsec.ParsecMessage {
                    type = Parsec.ParsecMessageType.MESSAGE_MOUSE_MOTION
                };

                message.mouseMotion.relative = true;
                message.mouseMotion.x        = deltaX;
                message.mouseMotion.y        = deltaY;

                parsec.ClientSendMessage(message);
            }
        }

        var gamepad = Gamepad.current;

        if (gamepad != null)
        {
            foreach (var kvp in ParsecInputSystemMapping.GamepadButtons(gamepad))
            {
                if (kvp.Value.wasPressedThisFrame || kvp.Value.wasReleasedThisFrame)
                {
                    var message = new Parsec.ParsecMessage {
                        type = Parsec.ParsecMessageType.MESSAGE_GAMEPAD_BUTTON
                    };

                    message.gamepadButton.button  = kvp.Key;
                    message.gamepadButton.pressed = kvp.Value.wasPressedThisFrame;

                    parsec.ClientSendMessage(message);
                }
            }

            foreach (var kvp in ParsecInputSystemMapping.GamepadAxes(gamepad))
            {
                short axis = (short)(kvp.Value.ReadValue() * short.MaxValue);

                var msg = new Parsec.ParsecMessage {
                    type = Parsec.ParsecMessageType.MESSAGE_GAMEPAD_AXIS
                };
                msg.gamepadAxis.axis  = kvp.Key;
                msg.gamepadAxis.value = axis;

                parsec.ClientSendMessage(msg);
            }
        }
    }