Я пытаюсь повернуть сферу с пользовательским контролем.
void RotateGlobe() {
SetLock();
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
userInput.x = Input.GetAxis("Mouse X");
userInput.y = Input.GetAxis("Mouse Y");
if (userInput.magnitude > 0 & Physics.Raycast(ray, Mathf.Infinity, LayerMask.NameToLayer("UI")))
{
Vector2 movement = new Vector2(Mathf.Sign(userInput.x), Mathf.Sign(userInput.y));
globe.transform.rotation =
Quaternion.Slerp(globe.transform.rotation,
Quaternion.Euler(0, movement.y * 90, movement.x * 180 + globe.transform.rotation.eulerAngles.x),
Time.time * speed);
}
}
RemoveLock();
}
Я не совсем понимаю кватернионы (опять же, кто действительно понимает), но глобус не только неправильно реагирует на ввод пользователя, но и застревает на оси x. Я понимаю, что он, вероятно, выбирает кратчайший путь от 180 до -180, не двигаясь.
Я предполагаю, что на данный момент я полностью готов изменить этот код в пользу лучшего метода (не slerp), но я полностью застрял, и предыдущие методы были столь же сложными и изменчивыми.
Как бы вы посоветовали мне вращать эту сферу?
В качестве бонуса, если бы я мог ограничить ось, было бы здорово. Я не очень хочу крутить дальше 90 или -90.