我从一个小自上而下的游戏开始,想在开始游戏时计算摄像机的变形。

相机未设置为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
}


c# - Unity将播放器放在屏幕中央-LMLPHP

那么,要让玩家处于中间位置,我该怎么计算呢?它应该一直有效,因此,如果我改变y的高度或将相机旋转80度或60度,则计算也应有效。

谢谢!

最佳答案

看来您需要在这里做一点三角。
如果摄像机的角度为70度而不是90度,则实际上意味着您的垂直轴与摄像机的投影中心之间的夹角为(90deg-70deg)。
由于我们知道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);


c# - Unity将播放器放在屏幕中央-LMLPHP

10-08 16:36