我从一个小的自上而下游戏开始,想要在开始游戏时计算相机变换。
相机未设置为90度,它应该设置为70度。旋转时,我需要计算Z上的差值,以保持播放器位于屏幕中间。
public Transform player; // player object
float offsetY = 30; // distance on y
float rotationAngleX = 70; // rotation when looking down
private void Start()
{
player = Globals.GetPlayerObject().transform; // reference
transform.Rotate(rotationAngleX, transform.rotation.y, transform.rotation.z); // rotate the camera down
transform.position = new Vector3(player.position.x, player.position.y + offsetY, player.position.z); // move it to the player
}
那么我需要在这里计算一下,将玩家放在中间位置?它应该始终有效,所以如果我改变y上的高度或将相机旋转80度或60度,计算也应该有效。
谢谢!
答案 0 :(得分:2)
看起来你需要在这里做一点三角测量。 如果相机处于70度,而不是90度,这实际上意味着您在垂直轴和相机的投影中心之间的角度为(90度-70度)。 由于我们知道tan(angle) = opposite/adjacent,我们可以按下这个公式来找到偏移Z中相机所需的“相反”距离。
这给我们留下了类似的内容:offsetZ = offsetY*Mathf.Tan(Mathf.Deg2Rad(90f-70f));
或者在你的普遍情况下:offsetZ = offsetY*Mathf.Tan(Mathf.Deg2Rad*(90f-rotationAngleX));
因此,如果您将相机向后移动偏移量,则播放器将居中。 下面美丽的MS Paint图片应该说明一下。
transform.position = new Vector3(player.position.x, player.position.y + offsetY, player.position.z - offsetZ);