Я реализовал базовую отдачу 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
Противодействие отдаче без перемещения вектора возврата ⇐ C#
Место общения программистов C#
-
Anonymous
1770898402
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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79810593/counteracting-recoil-without-moving-return-vector[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия