Unity использует два представления вращения, положения, углов euler и т. Д.
- один находится в мировом пространстве
- другой находится в локальном пространстве
значения, не включающие local
в их названии, находятся в мировом пространстве.Если у вашего объекта есть какие-либо родители, которые повернуты / масштабированы / переведены, вы не увидите значений, которые вы установили в Unity, поскольку инспектор Transform
отображает локальные координаты.
Если вы хотите установить local
вместо точных координат используйте вместо этого localPosition
, localRotation
или localEulerAngles
.
Мне кажется, вы хотите повернуть камеру вокруг своей локальной оси x
на 10 ° в 0,5секунд.
Так что я думаю, что вы могли бы вместо этого сделать это как
private IEnumerator LerpCameraNormalRot()
{
float duration = 0.5f;
float initialRotationX = camera.transform.localEulerAngles.x;
float targetRotationX = 10;
for (float t = 0f; t < duration; t += Time.deltaTime)
{
float currentX = Mathf.Lerp(initialRotationX, targetRotationX, t / duration);
camera.transform.localEulerAngles = new Vector3(currentX , 0, 0);
// Which would be the same as using
// camera.transform.localRotation = Quaternion.Euler(new Vector3(currentX, 0, 0));
yield return null;
}
// to be sure you have no overshooting you could set the target rotation fix here as well
camera.transform.localEulerAngles = new Vector3(targetRotation, 0 ,0);
// or
// camera.transform.localRotation = Quaternion.Euler(new Vector3(targetRotation, 0, 0));
}