【问题标题】:transform.LookAt() causes Y angle to increase by 180transform.LookAt() 使 Y 角增加 180
【发布时间】:2016-03-11 08:05:18
【问题描述】:

我正在尝试创建第三人称宇宙飞船运动。

宇宙飞船在其位置围绕所有轴旋转,并具有向前移动的油门控制。有一个相机总是在它后面。我没有让相机成为孩子,因为我希望相机不跟随围绕 z 轴的旋转。

相机有一个脚本,将其位置保持在飞船后面固定距离,然后调用transform.LookAt(spaceShipTarget)

问题是,当我将船绕全局 x 轴旋转 90 度时,相机的 y 轴突然旋转了 180 度。摄像头控制脚本如下:

using UnityEngine;

namespace UnityStandardAssets.Utility
{
    public class FollowBehind : MonoBehaviour
    {
        public Transform target;
        public float distance;
        public float delay;

        private Vector3 velocity = Vector3.zero;

        private void LateUpdate()
        {
            Vector3 offset = target.transform.TransformVector(0, 0, distance);
            Vector3 currentPosition = transform.position;
            Vector3 finalPosition = target.position + offset;
            transform.position = Vector3.SmoothDamp(currentPosition,
                finalPosition, ref velocity, delay);
            transform.LookAt(target);
        }
    }
}

为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 所以你将船在 x 上旋转 90 度,然后相机在 y 上跳跃 180 度?
  • 还有其他代码可以修改您的相机变换吗?如果是这样,您能否将其也包含在代码 sn-p 中?目前,给定的信息似乎不足以缩小问题范围......
  • @Serlite 完成...谢谢!
  • @NikaKasradze 是的。

标签: unity3d camera


【解决方案1】:

您在旋转相机时遇到的问题可能是由您用来使相机跟随宇宙飞船的脚本引起的,可能是因为当您旋转宇宙飞船时,相机的旋转(可能还有位置)受到影响。

您可以做的是将宇宙飞船和相机都设为另一个对象的子对象,然后将脚本添加到该父对象。现在您可以在父脚本中放置一些代码来移动父本身(这样相机和宇宙飞船将一起移动,您不需要手动将它们保持在一起),也可以在父脚本中根据特定的输入,放置一些代码来单独或一起旋转宇宙飞船和相机。

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多