Противодействие отдаче без перемещения вектора возвратаC#

Место общения программистов C#
Ответить
Anonymous
 Противодействие отдаче без перемещения вектора возврата

Сообщение Anonymous »

Я реализовал базовую отдачу FPS (код показан ниже), и в настоящее время игрок может противодействовать подъему отдачи, потянув мышь вниз, но когда отдача возвращается к нулю, угол обзора игрока оказывается под меньшим углом.
Я понимаю, почему это происходит, но я хочу сделать так, чтобы отдачу можно было противодействовать, не перемещая угол наклона покоя вниз. Вот мой код:
void Update()
{
_isAiming = _aimAction.IsPressed();
_isSprinting = _sprintAction.IsPressed();

if (_attackAction.IsPressed())
{
_Weapon.Fire();
}

_lookInput = _lookAction.ReadValue();
_moveInput = _moveAction.ReadValue();

_yawVelocity = _lookInput.x * _RotationSpeed;
_pitchVelocity = _lookInput.y * _RotationSpeed;

CameraRecoil();
CameraRotation();
Move();
}

private void CameraRecoil()
{
_targetRecoil = Vector3.Lerp(_targetRecoil, Vector3.zero, 10f * Time.deltaTime);
_currentRecoil = Quaternion.Slerp(_currentRecoil, Quaternion.Euler(_targetRecoil * (_isAiming ? _Weapon.AimedCameraRecoil : 1)), 5f * Time.deltaTime);
}

private void CameraRotation()
{
_cameraTargetPitch += _pitchVelocity;
_cameraTargetPitch = ClampAngle(_cameraTargetPitch, _bottomClamp, _topClamp);

_Head.localRotation = Quaternion.Euler(
_cameraTargetPitch,
0.0f,
0.0f
) * _currentRecoil;

transform.Rotate(Vector3.up * _yawVelocity);
}

private static float ClampAngle(float lfAngle, float lfMin, float lfMax)
{
if (lfAngle < -360f) lfAngle += 360f;
if (lfAngle > 360f) lfAngle -= 360f;
return Mathf.Clamp(lfAngle, lfMin, lfMax);
}

public void ApplyRecoil(Vector2 recoil)
{
_targetRecoil += new Vector3(recoil.y, Random.Range(-recoil.x, recoil.x), -0.1f);
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... urn-vector
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»