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); } }