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个不同的对象,保证了在进行旋转或位移时这些对象的变化不会互相影响。在下一章中,我们将对现有的地图编辑器功能进行拓展,为其增加一些新的功能,以适应现在尺寸更大的地图。