Unity3D键盘鼠标控制视角的移动
发表于2017-08-12
在3D游戏里面,视角是一个很重要的因素,部分玩家对锁视角嗤之以鼻,因此视角也是游戏制作里面需要努力的方面。其实也不难,换到Unity3D里面是想办法控制摄像机的移动。下面举一个简单的例子说明在Unity3D如何用键盘鼠标控制视角的移动的。如下图所示:


就像大部分游戏一样,可以用鼠标滚轮控制视角的远近,键盘的wasd和上下左右控制镜头的位置,而按着鼠标右键则可以控制镜头的旋转。当然你可以根据需要改成其它控制方式,反正原理是同一个原理。
其实这个游戏场景布置非常非常简单,也不是本文的重点。如下图所示,基本能够一览无遗:

如上图所示,我们其实需要做的,只是控制Main Camera的位置和旋转则能够做到上面的效果。因此赋予给Main Camera,如下的脚本CameraMove.cs:
using UnityEngine; using System.Collections; public class CameraMove : MonoBehaviour { public float sensitivityMouse = 2f; public float sensitivetyKeyBoard = 0.1f; public float sensitivetyMouseWheel = 10f; void Update() { //滚轮实现镜头缩进和拉远 if (Input.GetAxis("Mouse ScrollWheel") != 0) { this.camera.fieldOfView = this.camera.fieldOfView - Input.GetAxis("Mouse ScrollWheel") * sensitivetyMouseWheel; } //按着鼠标右键实现视角转动 if (Input.GetMouseButton(1)) { transform.Rotate(-Input.GetAxis("Mouse Y") * sensitivityMouse, Input.GetAxis("Mouse X") * sensitivityMouse, 0); } //键盘按钮←/a和→/d实现视角水平移动,键盘按钮↑/w和↓/s实现视角水平旋转 if (Input.GetAxis("Horizontal") != 0) { transform.Translate(Input.GetAxis("Horizontal") * sensitivetyKeyBoard, 0, 0); } if (Input.GetAxis("Vertical") != 0) { transform.Translate(0, Input.GetAxis("Vertical") * sensitivetyKeyBoard, 0); } } }
鼠标右键点击的监听这里就不说了,这里引用了Input.GetAxis的概念。理论上,你可以控制物体移动,控制主摄像机的移动与旋转的,但是使用Input.GetAxis会让你代码更加简洁,在Unity3D中有18条轴,不过基本上常用轴就是上述代码的几个。
Input.GetAxis能够获取这个轴的输入,也就是同样是用来监听鼠标输入的一个东西,它将返回一个-1~1的数值。用于记录用户按键盘的时长、翻滚轮、鼠标对比上一个位置偏移的多少。这样的话,我们再乘上一个合适的float,则可以形成一个坐标位置。配合Rotate与Translate则能够时物体移动。
另一方面,摄像头的焦距,也就是缩放可以直接对fieldOfView控制而达成。
关于用Unity3D键盘鼠标控制视角的移动就介绍这么多了,希望能帮到大家。