Я создал сценарий камеры от первого лица, и в настоящее время он прикреплен к основной камере, которая является дочерней частью моего проигрывателя.
Я думаю, что допустил ошибку при написании кода который я не могу решить. Моя чувствительность мыши установлена на очень низком уровне, 2f, что уже является приличной скоростью, что-то вроде 10f будет неконтролируемым.
Если я добавлю * Time.deltaTime к: float RotateSpeed = inputVector.x * mouseSensitivity; тогда мое вертикальное вращение станет намного быстрее, чем горизонтальное вращение, которое станет намного медленнее. Если я добавлю * Time.deltaTime к моим mouseX и mouseY внутри Update(), вертикальный ввод/вращение мыши больше не будет работает, и работает только горизонтальный ввод мышью. Но при втором подходе, если я увеличу чувствительность мыши, горизонтальный ввод по-прежнему будет работать, но вертикальный ввод перестанет работать и станет крайне нервным. Я что-то упустил?
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
// Camera rotation variables
public float mouseSensitivity = 2f;
public float topAngleLimit = 80.0f;
public float bottomAngleLimit = -45.0f;
private Vector2 inputVector;
public float cameraPitch = 0.0f;
public Transform mainCamera;
//public float horizontalRecoilOffset = 0f;
public Transform playerBody; // i put the main parent object into this inspector slot
[SerializeField] private WeaponManager weaponManager;
public Aiming aim;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
float mouseX = Input.GetAxis("Mouse X") * nouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * nouseSensitivity;
inputVector = new Vector2(mouseX, mouseY);
CameraRotation();
}
private void CameraRotation()
{
// Adjust vertical/pitch
cameraPitch -= inputVector.y;
cameraPitch = ClampAngle(cameraPitch, bottomAngleLimit, topAngleLimit);
// apply vertical rotation to the camera
mainCamera.localRotation = Quaternion.Euler(cameraPitch, horizontalRecoilOffset, 0.0f);
// Rotate the player body for horizontal move/yaw
float rotationSpeed = inputVector.x;
playerBody.Rotate(Vector3.up * rotationSpeed);
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360f) angle += 360f;
if (angle > 360f) angle -= 360f;
return Mathf.Clamp(angle, min, max);
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ut-unity3d
Как убрать дрожание ввода мыши в Unity3D? ⇐ C#
Место общения программистов C#
1732099903
Anonymous
Я создал сценарий камеры от первого лица, и в настоящее время он прикреплен к основной камере, которая является дочерней частью моего проигрывателя.
Я думаю, что допустил ошибку при написании кода который я не могу решить. Моя чувствительность мыши установлена на очень низком уровне, 2f, что уже является приличной скоростью, что-то вроде 10f будет неконтролируемым.
Если я добавлю * Time.deltaTime к: float RotateSpeed = inputVector.x * mouseSensitivity; тогда мое вертикальное вращение станет намного быстрее, чем горизонтальное вращение, которое станет намного медленнее. Если я добавлю * Time.deltaTime к моим [b]mouseX[/b] и [b]mouseY[/b] внутри [b]Update()[/b], вертикальный ввод/вращение мыши больше не будет работает, и работает только горизонтальный ввод мышью. Но при втором подходе, если я увеличу чувствительность мыши, горизонтальный ввод по-прежнему будет работать, но вертикальный ввод перестанет работать и станет крайне нервным. Я что-то упустил?
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
// Camera rotation variables
public float mouseSensitivity = 2f;
public float topAngleLimit = 80.0f;
public float bottomAngleLimit = -45.0f;
private Vector2 inputVector;
public float cameraPitch = 0.0f;
public Transform mainCamera;
//public float horizontalRecoilOffset = 0f;
public Transform playerBody; // i put the main parent object into this inspector slot
[SerializeField] private WeaponManager weaponManager;
public Aiming aim;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
float mouseX = Input.GetAxis("Mouse X") * nouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * nouseSensitivity;
inputVector = new Vector2(mouseX, mouseY);
CameraRotation();
}
private void CameraRotation()
{
// Adjust vertical/pitch
cameraPitch -= inputVector.y;
cameraPitch = ClampAngle(cameraPitch, bottomAngleLimit, topAngleLimit);
// apply vertical rotation to the camera
mainCamera.localRotation = Quaternion.Euler(cameraPitch, horizontalRecoilOffset, 0.0f);
// Rotate the player body for horizontal move/yaw
float rotationSpeed = inputVector.x;
playerBody.Rotate(Vector3.up * rotationSpeed);
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360f) angle += 360f;
if (angle > 360f) angle -= 360f;
return Mathf.Clamp(angle, min, max);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79206470/how-to-remove-jittery-mouse-input-unity3d[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия