Mathf.clamp () не ограничивает вращение оси y-оси MouseLook при высокой чувствительности/входных значениях. Как я могу оC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Mathf.clamp () не ограничивает вращение оси y-оси MouseLook при высокой чувствительности/входных значениях. Как я могу о

Сообщение Anonymous »

Я пытаюсь написать метод, MouseLookFirstPerson () , чтобы управлять ориентацией камеры с входом оси мыши. Из того, что я могу собрать, наиболее распространенным основным способом предотвращения инвертирования камеры при поиске очень далеко вверх или вниз является Mathf.clamp () , зажимая вращение камеры по оси x в пределах соответствующего диапазона. Я реализовал это в методе MouseLookFirstPerson () (внутри сценария PlayerCamera, прикрепленного к капсуле игрока, из которого камера - ребенок):

Код: Выделить всё

void MouseLookFirstPerson()
{
float sensNormalized = sensMouseLook*Time.deltaTime;                                 //Cache product of sensitivity and time passed last frame

float deltaY = sensNormalized*Input.GetAxis("Mouse Y");                              //Cache requested camera rotation about Y-axis
float deltaX = sensNormalized*Input.GetAxis("Mouse X");                              //Cache requested player rotation about X-axis

Vector3 deltaCamera = new Vector3(deltaY, 0, 0);                                     //Cache requested camera orientation change
Vector3 deltaPlayer = new Vector3(0, deltaX, 0);                                     //Cache requested player orientation change

Vector3 newOrientationCamera = Camera.main.transform.localEulerAngles - deltaCamera; //Cache new camera orientation by subtracting requested camera rotation from original camera orientation
Vector3 newOrientationPlayer = transform.eulerAngles                  + deltaPlayer; //Cache new player orientation by summing requested player rotation and original player orientation

Mathf.Clamp(newOrientationCamera.x, 89, -89);                                        //Clamp new camera orientation to allowed boundaries

transform.eulerAngles = newOrientationPlayer;                                        //Set player orientation to new player orientation
Camera.main.transform.localEulerAngles = newOrientationCamera;                       //Set camera orientation to new camera orientation
}
< /code>
Метод называется здесь (два других метода находятся в различных состояниях функциональности, но за пределами действия этого вопроса): < /p>
void Update()
{
...
switch (cameraMode)
{
case CameraMode.First:
MouseLookFirstPerson();
break;
case CameraMode.Third:
MouseLookThirdPerson();
break;
case CameraMode.Angled:
MouseLookAngled();
break;
}
}
this update () метод находится в том же скрипте PlayerCamera. 89 ° или -89 ° при любых обстоятельствах. Однако, если я очень быстро перемещаю свою мышь, или увеличу DPI, а также толкаю верхнюю или нижнюю границу, камера будет дрожать, а иногда и инверты. Это запретительно для игры, и не должно происходить ни при каких обстоятельствах. Используя тройной условной оператор): < /p>
Vector3 newOrientationCamera = Camera.main.transform.localEulerAngles - new Vector3(Camera.main.transform.localRotation.y < 89 && Camera.main.transform.localRotation.y > -89? -deltaY : 0, 0, 0);
< /code>
Это не оказало заметного влияния на поведение камеры. Нужно ли мне внедрить какую -то «сеть», чтобы поймать, когда камера инвертирует и сбросит его позицию? Предпочтительно, «дрожание» тоже не произойдет.

Подробнее здесь: https://stackoverflow.com/questions/794 ... ation-at-h
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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