-1

我正在使用 Unity 开发 TopDown-Shooter。跟随玩家的相机得到了它的变换

  • 位置:0,20,0
  • 旋转:65,0,0

相机正在使用这个简单的跟随命令:

private void Update()
{
    transform.position = new Vector3(playerTransform.position.x, transform.position.y, playerTransform.position.z);
}

由于相机在 x 轴上旋转了 65 度,相机不再居中。

游戏内视图

我必须在脚本中计算什么,才能将相机居中回到中间?

为了解决我的问题,我可以将相机设置为 (0,20,-10),但我需要计算它,因为如果更新中没有计算它,它会跳回来。

目前我只是在脚本中的 z 轴上计算 -20:

private void Update()
{
    transform.position = new Vector3(playerTransform.position.x, transform.position.y, playerTransform.position.z - 20);
}

我想用正确的值替换这个值。

4

1 回答 1

0

将您的场景想象成一个直角三角形,相机的视线指向斜边(示例)。我们知道相机离地的高度,20 个单位,我们知道相机相对于垂直方向的角度,35 度(90 - 65 = 35)。现在我们只需要求解水平距离 X。

我们的方程将是:

Tan(35 degrees) = X / 20
X = Tan(35 degrees) * 20
X = 14.004...

因此,您对 10 的猜测并不太遥远。要将其放入代码中,您将获得:

private void Update()
{
    float zDistance = Mathf.Tan(transform.eulerAngles.X * Mathf.Deg2Rad) * 20;
    transform.position = new Vector3(
        playerTransform.position.x, 
        transform.position.y, 
        playerTransform.position.z - zDistance);
}

如果您的相机角度不会改变,那么 zDistance 不会改变,您只需在Start().

于 2017-01-18T20:04:52.333 回答