コード例 #1
0
    private void LateUpdate()
    {
        if (!_active)
        {
            return;
        }

        // スピードダウン
        if (Input.GetButtonDown(InputPredefined.JOYSTICK_LEFT_PRESS) || Input.GetKeyDown(KeyCode.F))
        {
            switch (_speedMode)
            {
            case SpeedMode.Default:
                _speedMode = SpeedMode.Slow;
                break;

            case SpeedMode.Turbo:
                _speedMode = SpeedMode.Default;
                break;

            default:
                break;
            }
        }

        // スピードアップ
        if (Input.GetButtonDown(InputPredefined.JOYSTICK_RIGHT_PRESS) || Input.GetKeyDown(KeyCode.G))
        {
            switch (_speedMode)
            {
            case SpeedMode.Default:
                _speedMode = SpeedMode.Turbo;
                break;

            case SpeedMode.Slow:
                _speedMode = SpeedMode.Default;
                break;

            default:
                break;
            }
        }

        _mousePosDelta = Input.mousePosition - _prevMousePos;
        _prevMousePos  = Input.mousePosition;
        _nextPosition  = transform.position;

        // 速度の設定
        var movingSpeed   = _movingSensitivity;
        var hoveringSpeed = _hoveringSensitivity;

        if (Input.GetKey(KeyCode.LeftShift))
        {
            _speedMode = SpeedMode.Turbo;
        }
        else
        {
            _speedMode = SpeedMode.Default;
        }

        switch (_speedMode)
        {
        case SpeedMode.Slow:
            movingSpeed   = _movingSensitivity * 0.5f;
            hoveringSpeed = _hoveringSensitivity * 0.5f;
            break;

        case SpeedMode.Default:
            movingSpeed   = _movingSensitivity * 1.0f;
            hoveringSpeed = _hoveringSensitivity * 1.0f;
            break;

        case SpeedMode.Turbo:
            movingSpeed   = _movingSensitivity * 2.0f;
            hoveringSpeed = _hoveringSensitivity * 2.0f;
            break;

        default:
            break;
        }
        movingSpeed *= transform.lossyScale.x;

        var smoothness = _smoothMode == SmoothMode.Smooth ? _smoothness : _noSmoothness;

        var deltaTime = Time.deltaTime;

        var rightDir   = transform.right;
        var upDir      = _axisMode == AxisMode.Global ? Vector3.up : transform.up;
        var forwardDir = _axisMode == AxisMode.Global ? Vector3.ProjectOnPlane(transform.forward, Vector3.up) : transform.forward;

        var leftJoystick = new Vector2(Input.GetAxis(InputPredefined.HORIZONTAL_LEFT),
                                       Input.GetAxis(InputPredefined.VERTICAL_LEFT));
        var rightJoystick = new Vector2(Input.GetAxis(InputPredefined.HORIZONTAL_RIGHT),
                                        Input.GetAxis(InputPredefined.VERTICAL_RIGHT));

        var trigger = 0f;

        if (Input.GetAxis(InputPredefined.TRIGGER_LEFT) > 0f)
        {
            trigger = -_hoveringSensitivity * (Input.GetAxis(InputPredefined.TRIGGER_LEFT) + 1) / 2.0f;
        }
        else if (Input.GetAxis(InputPredefined.TRIGGER_RIGHT) > 0f)
        {
            trigger = _hoveringSensitivity * (Input.GetAxis(InputPredefined.TRIGGER_RIGHT) + 1) / 2.0f;
        }

        if (Input.GetMouseButton(1) || Input.GetKey(KeyCode.LeftAlt) && Input.GetMouseButton(0) || leftJoystick.sqrMagnitude > 0f || rightJoystick.sqrMagnitude > 0f || trigger != 0f)
        {
            // キーボード移動
            if (Input.GetKey(KeyCode.W))
            {
                _nextPosition = _nextPosition + forwardDir * movingSpeed;
            }

            if (Input.GetKey(KeyCode.A))
            {
                _nextPosition = _nextPosition - rightDir * movingSpeed;
            }

            if (Input.GetKey(KeyCode.S))
            {
                _nextPosition = _nextPosition - forwardDir * movingSpeed;
            }

            if (Input.GetKey(KeyCode.D))
            {
                _nextPosition = _nextPosition + rightDir * movingSpeed;
            }

            if (Input.GetKey(KeyCode.Q))
            {
                _nextPosition = _nextPosition - upDir * hoveringSpeed;
            }

            if (Input.GetKey(KeyCode.E))
            {
                _nextPosition = _nextPosition + upDir * hoveringSpeed;
            }

            // コントローラー移動
            _nextPosition += rightDir * leftJoystick.x * movingSpeed + forwardDir * leftJoystick.y * movingSpeed + upDir * trigger * movingSpeed;

            // マウス回転
            _elapsedAngles.y += Input.GetAxis(InputPredefined.MOUSE_X) * _rotationSensitivity;
            _elapsedAngles.x += -Input.GetAxis(InputPredefined.MOUSE_Y) * _rotationSensitivity;

            // コントローラー回転
            _elapsedAngles.y += rightJoystick.x * _rotationSensitivity;
            _elapsedAngles.x += -rightJoystick.y * _rotationSensitivity;

            transform.localRotation = SmoothDamp.Pow(transform.localRotation,
                                                     Quaternion.Euler(
                                                         new Vector3(_elapsedAngles.x, _elapsedAngles.y, 0f)), smoothness, deltaTime);
        }
        else if (Input.GetMouseButton(2))
        {
            var mouseDelta = _mousePosDelta;
            _nextPosition -= rightDir * mouseDelta.x * movingSpeed * 0.1f;
            _nextPosition -= upDir * mouseDelta.y * movingSpeed * 0.1f;
            //Debug.Log("mouseDelta : " + mouseDelta);
        }

        if (Input.mousePosition.x < Screen.width && Input.mousePosition.x > 0 && Input.mousePosition.y < Screen.height && Input.mousePosition.y > 0)
        {
            // マウスホイール前後移動
            _nextPosition += forwardDir * Input.GetAxis(InputPredefined.MOUSE_SCROLLWHEEL) * movingSpeed * _mouseWheelSensitivity;
        }

        transform.position = SmoothDamp.Pow(transform.position, _nextPosition, smoothness, deltaTime);

        // ズーム
        if (Input.GetKey(KeyCode.C) || Input.GetButton(InputPredefined.BUMPER_RIGHT_PRESS))
        {
            _cam.fieldOfView = SmoothDamp.Pow(_cam.fieldOfView, _defaultFov * 0.5f, 0.01f, deltaTime);
        }
        else if (Input.GetKey(KeyCode.Z) || Input.GetButton(InputPredefined.BUMPER_LEFT_PRESS))
        {
            _cam.fieldOfView = SmoothDamp.Pow(_cam.fieldOfView, _defaultFov * 1.5f, 0.01f, deltaTime);
        }
        else
        {
            _cam.fieldOfView = SmoothDamp.Pow(_cam.fieldOfView, _defaultFov, 0.01f, deltaTime);
        }
    }