围绕屏幕中心的轨道相机

时间:2017-12-29 06:03:18

标签: c# unity3d

我正在尝试将我的相机设置为围绕屏幕中心进行轨道运动,而不仅仅是旋转相机本身,而不是没有目标游戏对象。

我可以使用以下方法轻松围绕游戏对象进行轨道运行:

float rotationAmount = Input.GetAxis("Mouse X") * RotateAmount;
transform.RotateAround(target, Vector3.up, rotationAmount);

但是我希望有一个没有目标的类似轨道机制。有关示例,请参阅Planet Coaster camera controls

我已尝试使用ScreenToWorldPoint尝试获取屏幕中间但似乎仍然只是旋转相机:

camera.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, camera.nearClipPlane));

有一项工作是使用Vector3.zero作为目标。但是,如果我翻译相机,这个矢量仍然指向(0,0,0),因此相机会以奇怪的方式移动。

有没有办法在没有目标的情况下围绕屏幕中心进行轨道运行?

1 个答案:

答案 0 :(得分:1)

将相机放入GameObject(让我们称之为CameraHolder),稍微偏移相机(只需确保CameraHolder在相机的前向正轴上)。现在使用您的控件来控制CameraHolder而不是相机:

  1. 如果要移动相机,请移动CameraHolder的位置。因为相机是CameraHolder的孩子,它将保持localPosition并继续前进。但是,技巧是使用camera.transform的向量移动:

    • 前进:CameraHolder.position += camera.transform.forward
    • 向右移动:CameraHolder.position += camera.transform.right
  2. 这样您总是相对于相机的视图移动。

    此外,如果你想要像行星过山车一样的RTS控制(沿着飞机滑动 - 在这种情况下是地面),你需要将CameraHolder.transform.position.y限制在地面。您可以在每次移动后将y设置为固定值,也可以从y移除camera.transform.forward/right部分。

    1. 如果要旋转相机,只需更改CameraHolder的旋转,相机就会一直旋转。对于这种情况,您需要限制最大最小角度(最可能在0到-90度之间)