Unity. Как реализовать вращение камерой, допускающее резкое изменение поворота?

Нужно, чтобы можно было вращать камеру мышью. Ранее это было реализовано так:
void Update()
    {
        X = Input.GetAxis("Mouse X") * speeds * Time.deltaTime;
        Y = -Input.GetAxis("Mouse Y") * speeds * Time.deltaTime;
        transform.rotation = Quaternion.Euler(Y, X, 0);
    }

Однако когда появилась необходимость изменить поворот камеры, обнаружилось, что ее тут же возвращает в исходное положение.
Переделали:
void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame 
    void Update()
    {
        X = Input.GetAxis("Mouse X") * speeds * Time.deltaTime;
        Y = -Input.GetAxis("Mouse Y") * speeds * Time.deltaTime;
        transform.rotation *= Quaternion.Euler(Y, X, 0);
        if (Input.GetKeyUp(KeyCode.Escape))
        {
            Cursor.lockState = CursorLockMode.None;
        }
    }

Но теперь появилось странное вращение вокруг оси Z, хотя в коде явно указан 0.
Помогите, пожалуйста, как избавиться от этого вращения? Или вообще существует более оптимальный способ для решения задачи?
  • Вопрос задан
  • 12121 просмотр
Решения вопроса 1
@delphikettle
Программирую в свободное от учёбы время
private float X, Y, Z;
    public int speeds;
	private float eulerX=0, eulerY=0;
    // Use this for initialization
    void Start () {
		Cursor.lockState=CursorLockMode.Locked;
	}
	
	// Update is called once per frame
	void Update () {
        X = Input.GetAxis("Mouse X") * speeds * Time.deltaTime;
		Y = -Input.GetAxis("Mouse Y") * speeds * Time.deltaTime;
		eulerX = (transform.rotation.eulerAngles.x + Y) % 360;
		eulerY = (transform.rotation.eulerAngles.y + X) % 360;
        transform.rotation = Quaternion.Euler(eulerX, eulerY, 0);
		if (Input.GetKeyUp (KeyCode.Escape)) {
			Cursor.lockState = CursorLockMode.None;
		}
    }


У меня заработало, проблемы на вашей стороне.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
знак "*=" смените просто на "="
вращение 721 градус = 1 градусу )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы