我正在尝试将我的相机设置为围绕屏幕中心进行轨道运动,而不仅仅是旋转相机本身,而不是没有目标游戏对象。
我可以使用以下方法轻松围绕游戏对象进行轨道运行:
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)
,因此相机会以奇怪的方式移动。
有没有办法在没有目标的情况下围绕屏幕中心进行轨道运行?
答案 0 :(得分:1)
将相机放入GameObject(让我们称之为CameraHolder),稍微偏移相机(只需确保CameraHolder在相机的前向正轴上)。现在使用您的控件来控制CameraHolder而不是相机:
如果要移动相机,请移动CameraHolder的位置。因为相机是CameraHolder的孩子,它将保持localPosition并继续前进。但是,技巧是使用camera.transform的向量移动:
CameraHolder.position += camera.transform.forward
CameraHolder.position += camera.transform.right
这样您总是相对于相机的视图移动。
此外,如果你想要像行星过山车一样的RTS控制(沿着飞机滑动 - 在这种情况下是地面),你需要将CameraHolder.transform.position.y
限制在地面。您可以在每次移动后将y
设置为固定值,也可以从y
移除camera.transform.forward/right
部分。