5-10 摄像机旋转控制
在上一章中,我们完成了摄像机移动控制的功能,并为摄像机的移动范围作出了限制。在这一章中我们将完成摄像机旋转控制的相关功能。
摄像机的旋转并不像移动那样与视距有一定的关联性,所以只需要创建一个rotationSpeed
变量即可,默认值为180。在Update
中通过检测Rotation
的输入增量,来控制旋转角度。代码如下:
1 | //camera的旋转速率 |
代码编译完成后,将rotationSpeed
初始值设置为180,如下图:
这里需要注意,在默认的输入配置中并没有Rotation
相关配置,我们必须在 Project Settings 面板的 Input Manager选项卡中添加Rotation
相关配置。这里我们使用 Q 和 E、英文句号和逗号来作为按键输入。配置如下图所示:
与控制摄像机俯仰角类似,我们横向旋转摄像机,其实是在旋转Hex Map Camera
对象。通过时间增量计算出旋转角度,再对摄像机进行旋转即可。代码如下:
1 | //用于记录旋转角度 |
因为旋转一圈是360度,所以我们要将旋转角度的范围控制在0到360度之间。代码如下:
1 | private void AdjustRotation(float delta) |
代码完成后,我们就可以通过键盘Q和E键对视角进行旋转了。但是还有一个问题,当我们旋转了视角之后,摄像机的方向并没有改变,例如我们将视角旋转180度之后,按下W键本应该向前移动,却在向后移动。所以我们要在摄像机旋转的时候,重新计算摄像机的移动方向。代码如下:
1 | private void AdjustPosition(float xDelta, float zDelta) |
至此,我们就完成了摄像机的旋转、移动与视距控制。在对摄像机的视角控制时,我们并未直接对Main Camera
物体进行操作,而是将旋转、移动、视距这些操作分别对应了3个不同的对象,保证了在进行旋转或位移时这些对象的变化不会互相影响。在下一章中,我们将对现有的地图编辑器功能进行拓展,为其增加一些新的功能,以适应现在尺寸更大的地图。