【发布时间】:2020-02-24 17:42:04
【问题描述】:
这是一个学校项目。我有一个像行星一样的大立方体。我有一个小立方体,可以在立方体星球的每一侧移动。玩家在其局部 z 轴上自动向前移动,我将其旋转 90 或 -90 度以向左或向右移动 - 但玩家可以像上下左右移动一样控制它(制作了一个脚本,所以他们不不必用 2 个键旋转立方体)。这就像一个 Tron 游戏,所以如果我按向上键,我不能立即按下,因为我留下了痕迹,所以我必须按向左或向右键。我的相机移动有问题。摄像机从上方跟随小立方体,但我希望它在小立方体播放器靠近一侧边缘时稍微倾斜,以便让我看到另一侧——我打算去的地方。
我有一个脚本,其中我使用立方体星球的中心和玩家的中心作为方向向量,并将其与相机-玩家距离相乘。
Vector3 direction = (target.position - center.position).normalized;
transform.position = target.position + direction * distance;
然后我将相机的前向矢量指向玩家立方体的方向。我尝试了两个代码,但没有一个能完美运行。首先,我尝试使用以下方式旋转相机:
transform.rotation = Quaternion.LookRotation(-direction);
Shown in video。这样做的问题是,由于我没有告诉程序 Up 和 Right 向量(我认为),它会为自己设置一些随机数,因此相机有时会像旋转一样做自己的事情。
接下来我尝试了这个:
Quaternion rot = Quaternion.FromToRotation(transform.forward, -direction);
transform.Rotate(rot.eulerAngles, Space.World);
Shown in video。这几乎是好的,但随着小立方体的移动,相机开始轻微转向,并且变得越来越糟。
您有什么想法可以让它发挥作用吗?我希望你明白我想要达到的目标。我正在尝试将相机设置为始终显示当我按下 Up 时,我的立方体向上移动,当我按下 Right 时,我的立方体总是向右移动等等。当我到达我身边的边缘时,相机会稍微倾斜一点我要去的那一边。
【问题讨论】:
标签: c# unity3d quaternions