我正在使用Unity开发一个TopDown-Shooter。跟随玩家的相机得到了改造
相机正在使用这个简单的跟随命令:
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);
}
我希望用正确的值替换此值。
答案 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()
中计算一次。