У меня есть основная камера в сцене:
И у меня есть этот код, который плавно вращает камеру:
private IEnumerator SmoothlyRotateCamera()
{
float duration = 0.3f;
Quaternion from = transform.rotation;
Quaternion to = from * Vector3.up * 180f;
float elapsed = 0.0f;
while (elapsed < duration)
{
transform.rotation = Quaternion.Slerp(from, to, elapsed / duration);
elapsed += Time.deltaTime;
yield return null;
}
transform.rotation = to;
isRotating = false;
yield return null;
}
В настоящее время моя камера поворачивается на [30, -60, 0]
, и я хочу, чтобы она вращалась вокруг оси Y на 180 градусов.
Теоретически, чтобы добиться этого, мне нужно повернуть его на Vector3.up * 180f
, все звучит нормально, кроме того факта, что когда я поворачиваю его таким образом, он также вращает и все другие оси.
Если я поверну его на new Vector3(180f, 0f, 0f)
- будет затронута только ось X.
Если я поверну его на new Vector3(0f, 0f, 180f)
- это повлияет только на ось Z.
И если я поверну его на new Vector3(0f, 180f, 0f)
- все оси тоже будут вращаться.
Я проверил вращение, установив вращение X на 0, так что теперь вращение моей камеры равно [0, -60, 0]
, и если я поверну его так, как предполагалось, к Vector3.up * 180f
, то все будет отлично! НО, мне нужен X моей камеры, чтобы оставаться на месте. Например, поворот в самом редакторе только на Y дает мне желаемый результат.
Что мне делать? Как мне повернуть его на 180 градусов только по оси Y?
P.S. Я знаю о transform.Rotate
, но в моем случае мне нужно повернуть его так, как я описал здесь.
Спасибо!