Как добиться очень отзывчивого ввода мышью в Unity3d? - PullRequest
0 голосов
/ 11 июня 2018
 private void Update()
 {
     yaw += horizontalSensitivity * Input.GetAxisRaw("Mouse X");
     pitch -= verticalSensitivity * Input.GetAxisRaw("Mouse Y") ;

     if (pitch < -pitchCap) { pitch = -1 * pitchCap; }
     if (pitch > pitchCap) { pitch = pitchCap; }

     transform.rotation = Quaternion.Euler(pitch, yaw, 0.0f);
 }

Это код, который я использую для обновления поворота камеры в моем проекте.Это работает так, как задумано, но я заметил особенно маленькую задержку.Я мог чувствовать вращение камеры, когда я немного двигал мышью.отзывчивый.Однако с этой настройкой я не могу сказать, что чувствую то же самое.Существует некоторая задержка ввода.

Как я могу уменьшить эту задержку и создать более отзывчивый скрипт движения мыши?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вы должны сгладить значения с помощью мыши.Вы можете сделать это, изменив Input.GetAxisRaw на Input.GetAxis.Также умножьте его на Time.deltaTime, чтобы сохранить его одинаковым на всех платформах.


Если это не решит вашу проблему, просто измените угол localEulerAngles вместо transform.rotation, который равен Quaternion.Посмотрите пример ниже, который также ограничивает вращение оси Y, так как вы делаете контроллер FPS:

public float xMoveThreshold = 1000.0f;
public float yMoveThreshold = 1000.0f;

public float yMaxLimit = 45.0f;
public float yMinLimit = -45.0f;


float yRotCounter = 0.0f;
float xRotCounter = 0.0f;

Transform mainCam;

void Start()
{
    mainCam = Camera.main.transform;
}

// Update is called once per frame
void Update()
{
    xRotCounter += Input.GetAxis("Mouse X") * xMoveThreshold * Time.deltaTime;
    yRotCounter += Input.GetAxis("Mouse Y") * yMoveThreshold * Time.deltaTime;
    yRotCounter = Mathf.Clamp(yRotCounter, yMinLimit, yMaxLimit);
    //xRotCounter = xRotCounter % 360;//Optional
    mainCam.localEulerAngles = new Vector3(-yRotCounter, xRotCounter, 0);
}
0 голосов
/ 11 июня 2018

Вы можете попытаться поместить свой код в метод FixedUpdate, потому что он вызывается при каждой фиксированной частоте кадров, что может вызвать задержку в функции Update.https://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html

...