将自上而下相机居中65度

时间:2017-01-14 15:34:14

标签: unity3d position angle topdown

我正在使用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度,因此相机不再居中。

Ingame View

我需要在脚本中计算一下,将相机放回中间位置?

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

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

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

我希望用正确的值替换此值。

1 个答案:

答案 0 :(得分:0)

想象一下你的场景是一个直角三角形,相机的视线指向斜边(example)。我们知道相机离地面的高度,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()中计算一次。