Как убрать дрожание ввода мыши в Unity3D?C#

Место общения программистов C#
Ответить
Anonymous
 Как убрать дрожание ввода мыши в Unity3D?

Сообщение Anonymous »

Я создал сценарий камеры от первого лица, и в настоящее время он прикреплен к основной камере, которая является дочерней частью моего проигрывателя.
Я думаю, что допустил ошибку при написании кода который я не могу решить. Моя чувствительность мыши установлена ​​на очень низком уровне, 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;
public float rotationThreshold = 0.01f;
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()
{
// Default to the main mouse sensitivity
float currentMouseSensitivity = mouseSensitivity;

// If aiming, i use the weapons sensitivity for aiming, otherwise i use default sensitivity
if (aim.isAiming && weaponManager != null && weaponManager.GetCurrentWeapon() != null)
{
currentMouseSensitivity = weaponManager.GetCurrentWeapon().mouseSensitivity;
}

float mouseX = Input.GetAxis("Mouse X") * currentMouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * currentMouseSensitivity;

inputVector = new Vector2(mouseX, mouseY);

CameraRotation();
}

private void CameraRotation()
{
if (inputVector.sqrMagnitude >= rotationThreshold)
{
// Adjust vertical/pitch
cameraPitch -= inputVector.y * mouseSensitivity;
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 * mouseSensitivity;
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
Ответить

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

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

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

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

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