在游戏的开发过程中,时常需要获取用户的输入情况,Unity3D引擎在设计时就封装好了这些常用的方法与参数。
针对用户的输入,Unity3D引擎专门为开发人员提供两个输入对象——Touch与Input。开发人员通过Touch与Input输入对象中的方法及参数可以非常方便地获取用户输入的各种参数,包括触控的位置、相位、手指按下位移及用户鼠标键盘的输入等
Touch输入对象提供了非常详细的参数及方法,通过使用该对象,开发人员可以获取详细的如 Android、iOS等移动平台中的触摸操控信息。
变量 | 含义 |
---|---|
finger | 手指的索引 |
deltaPosition | 距离上次改变的距离增量 |
tapCount | 单击次数 |
Position | 手指的位置 |
deltaTime | 自上次改变的时间增量 |
Phase | 触摸相位 |
Input输入对象就可以获取用户一切的其他行为的输入
变量 | 含义 |
---|---|
mousePosition | 当前鼠标指针的像素坐标 |
anyKeyDown | 用户单击任何键或鼠标按钮,第一帧返回true |
acceleration | 加速度传感器的值 |
anyKey | 当前是否有按键按下,若有返回true |
inputString | 返回键盘输入的字符串 |
touches | 返回当前触摸(Touch)列表 |
mousePosition变量是一个三维坐标,用于获取当前鼠标指针的像素坐标。像素坐标是以屏幕左下角为(0,0)、屏幕右上角坐标为(Screen.width,Screen.height)计算的。
void Update () {
if (Input.GetButtonDown("Fire1"))//鼠标左键按下
{
Debug.Log(Input.mousePosition);//输出鼠标指针位置
}
}
anyKey变量的功能是检测当前是否有任何按键按下,若是有,就返回True。
anyKeyDown变量和anyKey变量有些差别,该变量只有按下按钮后的第一帧返回True。在任意按键后,只会有一次输出,而anykey会每一帧返回一定数量的True。
void Update () {
if (Input.anyKey)//有按钮按下
{
Debug.Log("一个按键或鼠标按下,若有返回true");//输出信息
}
}
inputString变量的功能是返回键盘在这一帧中输入的字符串。注意,返回的字符串中只包含ASCII码中的字符,若是本次没有输入字符串就会返回一个空串。
void Update () {
if (Input.inputString != "")//若当前输入字符串不为空
{
Debug.Log(Input.inputString);//输出输入字符串
}
}
accelerate变量可以获取设备在当前三维空间中的线性加速度,它常见于3D游戏中的重力感应操控模式。当用户倾斜设备时,若设备上有加速度传感器,就会传回一个代表设备倾斜加速度的三维向量,使用Input.acceleration变量就可以获取该参数
通过Input.touches变量可以获取到当前在屏幕上的所有触控的引用,开发人员就可以根据索引轻易地获取各个触控点的信息,所以该变量也经常被使用到。
变量 | 含义 |
---|---|
GetAxis | 返回被表示的虚拟轴的值 |
GetButton | 若虚拟按钮被按下,则返回true |
GetButtonUp | 抬起虚拟按钮的一帧返回true |
GetKeyDown | 按下指定按钮的一帧返回true |
GetMouseButton | 指定的鼠标按键按下时返回true |
GetMouseButtonUp | 指定鼠标按键抬起的一帧返回true |
GetAxisRaw | 返回没有经过平滑处理的虚拟轴的值 |
GetButtonDown | 虚拟按钮被按下的一帧返回true |
GetKey | 按下指定按钮时返回true |
GetKeyUp | 抬起指定按钮的一帧返回true |
GetMouseButtonDown | 指定的鼠标按键按下的一帧返回true |
GetTouch | 根据索引返回当前触控(Touch类型) |
GetAxis方法和GetAxisRaw方法都是获取虚拟轴对应值的方法。在游戏的开发的过程中,开发人员经常会在屏幕中添加一些2D的虚拟轴。通过触控或鼠标事件改变虚拟轴的值可以控制场景中的游戏对象
private float speed = 0.1f;//移动速度
void Update () {
float moveX = Input.GetAxis("Horizontal");//获取水平轴的值
float moveY = Input.GetAxis("Vertical");//获取垂直轴的值
this.transform.Translate(new Vector3(moveX, moveY, 0) * speed);//移动物体
}
GetAxisRaw方法运行后按下方向键就会发现moveX的值只有-1、0、1这3种变化,没有中间的过渡值
这3个方法用于监听虚拟按钮的按下状态,包括按钮按下时、按钮按下中、按钮抬起时3个状态。开发人员需要在Update方法中返回调这些方法来判断按钮的状态。
void Update()
{
if (Input.GetButton("Fire1"))//按钮按下时
{
Debug.Log("Fire GetButton");
}
if (Input.GetButtonDown("Fire1"))//按钮按下中
{
Debug.Log("Fire GetButtonDown");
}
if (Input.GetButtonUp("Fire1"))//按钮抬起时
{
Debug.Log("Fire GetButtonUp");
}
}
这3种方法用于监听键盘上的按键状态,开发人员需要在Update方法中调用这些方法,并传入想要监听的键名或键码。每一个按钮
GetKey():当前是否按下了任何键或鼠标按钮(在一帧的时间内不断返回true),按住时始终回调。
GetKeyDown():当前是否按住任何键或鼠标按钮
GetKeyUp():当前是否抬起按键
void Update()
{
if (Input.GetKey("up"))//使用GetKey监听上按键
{
Debug.Log("up arrow GetKey");//输出信息
}
if (Input.GetKeyDown(KeyCode.UpArrow))//使用GetKeyDown监听上按键
{
Debug.Log("up arrow GetKeyDown");//输出信息
}
if (Input.GetKeyUp(KeyCode.UpArrow))//使用GetKeyUp监听上按键
{
Debug.Log("up arrow GetKeyUp");//输出信息
}
}
当开发PC端的游戏时,肯定需要监听鼠标的操控。Input输入对象包含GetMouseButton、GetMouseButtonDown和GetMouseButtonUp这3种方法,这3种方法都是用来监听鼠标按键的。在使用时,需要在Update方法中传入鼠标按键的索引,这就可以对鼠标进行监听。
这三种方法的参数是一个int类型的索引。常用的鼠标按键索引为0、1、2,它们分布监听鼠标的左键、右键、中键,需要使用时传入相应的索引就可以监听对应的按键
void Update () {
if (Input.GetMouseButton(0))//GetMouseButton监听鼠标左键
{
Debug.Log("left mouseButton GetMouseButton");//输出信息
}
if (Input.GetMouseButtonDown(0))
{
Debug.Log("left mouseButton GetMouseButtonDown ");
}
if (Input.GetMouseButtonUp(0))
{
Debug.Log("left mouseButton GetMouseButtonUp");
}
}
使用其参数时需要获取一个Touch类型的变量。Input.GetTouch方法用于获取Touch输入对象的引用,在使用时应传入一个索引值,它代表要获取的触控索引。
void Update () {
if (Input.touchCount != 0)//当前发送触控
{
Vector3 touchPos = Input.GetTouch(0).position;//记录下触控点的位置
}
}