对Unity Input 输入控制的深入探讨

Unity Input

Unity需要通过键盘、鼠标、手柄、摇杆来获取玩家对游戏的控制。你可以在 Input窗口设置按钮和虚拟轴,在代码中通过Input类监听玩家控制。游戏发布后玩家也可以在设置对话框中自行设置相关按键。
游戏设置对话框

添加及设置输入轴

Unity中打开Edit->Project Settings->Input面板,界面如下:
Input面板
此项目中只有10个输入轴,如果你想添加自己的输入轴,只需要更改Size属性。Size表示你所有输入轴的数量。接下来我们看下每个输入轴里面的各个属性。
Input Axis属性
* Name: 该输入轴的名称,相当于ID,在代码中我们可以根据该属性引用对应的输入轴;
* Descriptive Name: 游戏设置对话框中输入轴的名称,方便玩家设置对应按键;
* Descriptive Negative Name: 和Descriptive Name差不多,只是表示相反方向;
* Negative Button :对应于键盘、鼠标、手柄上的按键,并且是该控制的反向轴;
* Positive Button: 对应于键盘、鼠标、手柄上的按键,并且是该控制的正向轴;
* Alt Negative Button: Negative Button的备选按键;
* Alt Positive Button: Positive Button的备选按键;
Descriptive Name
* Gravity: 当不再按下此按键的时候,该输入轴的数值会以Gravity的速度变为默认值;
* Dead: 盲区。如果输入轴数值在此范围内,则以默认值替换;
* Sensitivity 当按下此按键的时候,该输入轴的数值从默认值以Sensitivity的速度向最大值增加,可视为Gravity属性的相反属性;
* Snap 如果选中,在按下一个按键的同时按下相反方向的按键输入轴数值立刻归零,比如在控制角色移动时,要想同时按下前进键和后退键角色站在原地不动时,可以勾选该属性;
* Invert: 如果选中,Negative Button和Positive Button的效果互换。如果要实现按下前进键时后退效果,可以勾选此项;
* Type 输入轴的输入设备类型,有Key or Mouse Button(j键盘按键、鼠标点击的等)、Mouse Movement(鼠标移动)、Joystick Axis(摇杆控制);
* Axis: 外设的输入轴,有x控制轴、y控制轴、摇杆及滚轮轴等;
* Joy Num: 使用的摇杆序号。
关于Gravity和Sensitivity我们来看一个例子:
Gravity与Sensitivity
以水平轴为例,在代码中我们这样写:

using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour {

    public int Speed = 10;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        float x = Input.GetAxis("Horizontal");
        float y = Input.GetAxis("Vertical");
        Debug.Log("x:" + x + ";y:" + y + ".");
    }

}

我们按下D键的一瞬间,x值从默认值0逐渐增大,在Sensitivity=10的情况下经过7个Uptate时间(一帧的时间)到达目标值1,在Sensitivity=20的情况下经过4个Uptate时间到达目标值1;在我们松开D键的一瞬间x会以Gravity的速度向0变化。

使用代码监听输入轴

我们会用到Input接口来进行监听。在上面的例子中我们使用GetAxis()方法来获取输入轴的数值,参数为输入轴的名字(在Input窗口中的Name)。Input中还有好多监听方法,每个方法都有不同的用处。

GetAxis()和GetAxisRaw()

二者用法相似,区别在于GetAxis()的返回值是从1到-1之间的数,而GetAxisRaw()的返回值只能是0、1、-1。也就是说相比与GetAxisRaw(),GetAxis()提供了按键按下、按键松开的瞬时值。

GetKey* ()和GetButton* ()

GetButton*()和GetKey*()都要求传入一个String类型的参数,GetKey*()要求该参数是预设的枚举类型参数,在KeyCode.cs中定义;而GetButton*()中形参既可以是KeyCode.cs中定义好的枚举类型参数,也可以使在Input面板中我们自定义的参数Name,所以我们一般使用GetButton* ()。
GetButton* ()主要有GetButton()、GetButtonDown()、GetButtonUp()。在按下Button的那一帧,GetButton()、GetButtonDown()返回值为true。之后在按住Button时,GetButton()返回值为true,GetButtonDown()的返回值为false。在松开Button的那一帧,GetButton()的返回值变为false,GetButtonUp()的返回值变为true。在之后的一帧中,GetButonUp()的返回值变false。

GetMouseButton*()

监听鼠标按键。传入参数为整数0、1、2,分别代表左键、右键、滚轮键。GetMouseButton* ()有GetMouseButtonDown()、GetMouseButton()、GetMouseButtonUp(),其用法和GetButton* ()相似。

GetTouch()

Unity提供了对移动设备监听的接口,包括对触摸屏、加速度计、地理位置的监听。Input类中的GetTouch()用于对触摸屏监听,其返回值为预定义的Touch结构体,代表在屏幕上的一次触摸,该结构组成如下:
Touch
一般我们经常会用到Touch里面的phase。phase是TouchPhase类,而TouchPhase是一个枚举类型,定义如下:

public enum TouchPhase
    {
        //     A finger touched the screen.
        Began = 0,
        //     A finger moved on the screen.
        Moved = 1,
        //     A finger is touching the screen but hasn't moved.
        Stationary = 2,
        //     A finger was lifted from the screen. This is the final phase of a touch.
        Ended = 3,
        //     The system cancelled tracking for the touch.
        Canceled = 4
    }

其中,Began表示手指刚刚触摸屏幕(一次Touch的开始);Moved表示手指在屏幕上移动;Stationary表示手指触摸屏幕且静止不动;Ended表示手指离开屏幕,Touch结束;Canceled表示系统取消了触控跟踪,比如说在触摸过程中用户将脸或者大腿贴在了屏幕上(显然没有哪款游戏是用脸或大腿触屏来控制的)。
Unity圣典给出了一个示例,用户在屏幕上点击,将射出一条光线:

var particle : GameObject;
function Update () {
    for (var touch : Touch in Input.touches) {
        if (touch.phase == TouchPhase.Began) {
            // Construct a ray from the current touch coordinates
            //从当前的触摸坐标建一条光线
            var ray = Camera.main.ScreenPointToRay (touch.position);
            if (Physics.Raycast (ray)) {
                // Create a particle if hit
                //如果触摸就创建一个例子
                Instantiate (particle, transform.position, transform.rotation);
            }
        }
    }
}

KeyCode.cs

在GetButton()和GetCode()调用中,需要传入KeyCode.cs中预定义的枚举类型参数。KeyCode.cs中所有枚举参数如下:

键值 描述
None Not assigned (never returned as the result of a keystroke).
Backspace The backspace key.
Delete The forward delete key.
Tab The tab key.
Clear The Clear key.
Return Return key.
Pause Pause on PC machines.
Escape Escape key.
Space Space key.
Keypad0 Numeric keypad 0.
Keypad1 Numeric keypad 1.
Keypad2 Numeric keypad 2.
Keypad3 Numeric keypad 3.
Keypad4 Numeric keypad 4.
Keypad5 Numeric keypad 5.
Keypad6 Numeric keypad 6.
Keypad7 Numeric keypad 7.
Keypad8 Numeric keypad 8.
Keypad9 Numeric keypad 9.
KeypadPeriod Numeric keypad ‘.’.
KeypadDivide Numeric keypad ‘/’.
KeypadMultiply Numeric keypad ‘*’.
KeypadMinus Numeric keypad ‘-‘.
KeypadPlus Numeric keypad ‘+’.
KeypadEnter Numeric keypad enter.
KeypadEquals Numeric keypad ‘=’.
UpArrow Up arrow key.
DownArrow Down arrow key.
RightArrow Right arrow key.
LeftArrow Left arrow key.
Insert Insert key key.
Home Home key.
End End key.
PageUp Page up.
PageDown Page down.
F1 F1 function key.
F2 F2 function key.
F3 F3 function key.
F4 F4 function key.
F5 F5 function key.
F6 F6 function key.
F7 F7 function key.
F8 F8 function key.
F9 F9 function key.
F10 F10 function key.
F11 F11 function key.
F12 F12 function key.
F13 F13 function key.
F14 F14 function key.
F15 F15 function key.
Alpha0 The ‘0’ key on the top of the alphanumeric keyboard.
Alpha1 The ‘1’ key on the top of the alphanumeric keyboard.
Alpha2 The ‘2’ key on the top of the alphanumeric keyboard.
Alpha3 The ‘3’ key on the top of the alphanumeric keyboard.
Alpha4 The ‘4’ key on the top of the alphanumeric keyboard.
Alpha5 The ‘5’ key on the top of the alphanumeric keyboard.
Alpha6 The ‘6’ key on the top of the alphanumeric keyboard.
Alpha7 The ‘7’ key on the top of the alphanumeric keyboard.
Alpha8 The ‘8’ key on the top of the alphanumeric keyboard.
Alpha9 The ‘9’ key on the top of the alphanumeric keyboard.
Exclaim Exclamation mark key ‘!’.
DoubleQuote Double quote key ‘”’.
Hash Hash key ‘#’.
Dollar Dollar sign key ‘$’.
Ampersand Ampersand key ‘&’.
Quote Quote key ‘.
LeftParen Left Parenthesis key ‘(‘.
RightParen Right Parenthesis key ‘)’.
Asterisk Asterisk key ‘*’.
Plus Plus key ‘+’.
Comma Comma ‘,’ key.
Minus Minus ‘-’ key.
Period Period ‘.’ key.
Slash Slash ‘/’ key.
Colon Colon ‘:’ key.
Semicolon Semicolon ‘;’ key.
Less Less than ‘<’ key.
Equals Equals ‘=’ key.
Greater Greater than ‘>’ key.
Question Question mark ‘?’ key.
At At key ‘@’.
LeftBracket Left square bracket key ‘[‘.
Backslash Backslash key ‘\’.
RightBracket Right square bracket key ‘]’.
Caret Caret key ‘^’.
Underscore Underscore ‘_’ key.
BackQuote Back quote key ‘`’.
A ‘a’ key.
B ‘b’ key.
C ‘c’ key.
D ‘d’ key.
E ‘e’ key.
F ‘f’ key.
G ‘g’ key.
H ‘h’ key.
I ‘i’ key.
J ‘j’ key.
K ‘k’ key.
L ‘l’ key.
M ‘m’ key.
N ‘n’ key.
O ‘o’ key.
P ‘p’ key.
Q ‘q’ key.
R ‘r’ key.
S ’s’ key.
T ‘t’ key.
U ‘u’ key.
V ‘v’ key.
W ‘w’ key.
X ‘x’ key.
Y ‘y’ key.
Z ‘z’ key.
Numlock Numlock key.
CapsLock Capslock key.
ScrollLock Scroll lock key.
RightShift Right shift key.
LeftShift Left shift key.
RightControl Right Control key.
LeftControl Left Control key.
RightAlt Right Alt key.
LeftAlt Left Alt key.
LeftCommand Left Command key.
LeftApple Left Command key.
LeftWindows Left Windows key.
RightCommand Right Command key.
RightApple Right Command key.
RightWindows Right Windows key.
AltGr Alt Gr key.
Help Help key.
Print Print key.
SysReq Sys Req key.
Break Break key.
Menu Menu key.
Mouse0 The Left (or primary) mouse button.
Mouse1 Right mouse button (or secondary mouse button).
Mouse2 Middle mouse button (or third button).
Mouse3 Additional (fourth) mouse button.
Mouse4 Additional (fifth) mouse button.
Mouse5 Additional (or sixth) mouse button.
Mouse6 Additional (or seventh) mouse button.
JoystickButton0 Button 0 on any joystick.
JoystickButton1 Button 1 on any joystick.
JoystickButton2 Button 2 on any joystick.
JoystickButton3 Button 3 on any joystick.
JoystickButton4 Button 4 on any joystick.
JoystickButton5 Button 5 on any joystick.
JoystickButton6 Button 6 on any joystick.
JoystickButton7 Button 7 on any joystick.
JoystickButton8 Button 8 on any joystick.
JoystickButton9 Button 9 on any joystick.
JoystickButton10 Button 10 on any joystick.
JoystickButton11 Button 11 on any joystick.
JoystickButton12 Button 12 on any joystick.
JoystickButton13 Button 13 on any joystick.
JoystickButton14 Button 14 on any joystick.
JoystickButton15 Button 15 on any joystick.
JoystickButton16 Button 16 on any joystick.
JoystickButton17 Button 17 on any joystick.
JoystickButton18 Button 18 on any joystick.
JoystickButton19 Button 19 on any joystick.
Joystick1Button0 Button 0 on first joystick.
Joystick1Button1 Button 1 on first joystick.
Joystick1Button2 Button 2 on first joystick.
Joystick1Button3 Button 3 on first joystick.
Joystick1Button4 Button 4 on first joystick.
Joystick1Button5 Button 5 on first joystick.
Joystick1Button6 Button 6 on first joystick.
Joystick1Button7 Button 7 on first joystick.
Joystick1Button8 Button 8 on first joystick.
Joystick1Button9 Button 9 on first joystick.
Joystick1Button10 Button 10 on first joystick.
Joystick1Button11 Button 11 on first joystick.
Joystick1Button12 Button 12 on first joystick.
Joystick1Button13 Button 13 on first joystick.
Joystick1Button14 Button 14 on first joystick.
Joystick1Button15 Button 15 on first joystick.
Joystick1Button16 Button 16 on first joystick.
Joystick1Button17 Button 17 on first joystick.
Joystick1Button18 Button 18 on first joystick.
Joystick1Button19 Button 19 on first joystick.
Joystick2Button0 Button 0 on second joystick.
Joystick2Button1 Button 1 on second joystick.
Joystick2Button2 Button 2 on second joystick.
Joystick2Button3 Button 3 on second joystick.
Joystick2Button4 Button 4 on second joystick.
Joystick2Button5 Button 5 on second joystick.
Joystick2Button6 Button 6 on second joystick.
Joystick2Button7 Button 7 on second joystick.
Joystick2Button8 Button 8 on second joystick.
Joystick2Button9 Button 9 on second joystick.
Joystick2Button10 Button 10 on second joystick.
Joystick2Button11 Button 11 on second joystick.
Joystick2Button12 Button 12 on second joystick.
Joystick2Button13 Button 13 on second joystick.
Joystick2Button14 Button 14 on second joystick.
Joystick2Button15 Button 15 on second joystick.
Joystick2Button16 Button 16 on second joystick.
Joystick2Button17 Button 17 on second joystick.
Joystick2Button18 Button 18 on second joystick.
Joystick2Button19 Button 19 on second joystick.
Joystick3Button0 Button 0 on third joystick.
Joystick3Button1 Button 1 on third joystick.
Joystick3Button2 Button 2 on third joystick.
Joystick3Button3 Button 3 on third joystick.
Joystick3Button4 Button 4 on third joystick.
Joystick3Button5 Button 5 on third joystick.
Joystick3Button6 Button 6 on third joystick.
Joystick3Button7 Button 7 on third joystick.
Joystick3Button8 Button 8 on third joystick.
Joystick3Button9 Button 9 on third joystick.
Joystick3Button10 Button 10 on third joystick.
Joystick3Button11 Button 11 on third joystick.
Joystick3Button12 Button 12 on third joystick.
Joystick3Button13 Button 13 on third joystick.
Joystick3Button14 Button 14 on third joystick.
Joystick3Button15 Button 15 on third joystick.
Joystick3Button16 Button 16 on third joystick.
Joystick3Button17 Button 17 on third joystick.
Joystick3Button18 Button 18 on third joystick.
Joystick3Button19 Button 19 on third joystick.
Joystick4Button0 Button 0 on forth joystick.
Joystick4Button1 Button 1 on forth joystick.
Joystick4Button2 Button 2 on forth joystick.
Joystick4Button3 Button 3 on forth joystick.
Joystick4Button4 Button 4 on forth joystick.
Joystick4Button5 Button 5 on forth joystick.
Joystick4Button6 Button 6 on forth joystick.
Joystick4Button7 Button 7 on forth joystick.
Joystick4Button8 Button 8 on forth joystick.
Joystick4Button9 Button 9 on forth joystick.
Joystick4Button10 Button 10 on forth joystick.
Joystick4Button11 Button 11 on forth joystick.
Joystick4Button12 Button 12 on forth joystick.
Joystick4Button13 Button 13 on forth joystick.
Joystick4Button14 Button 14 on forth joystick.
Joystick4Button15 Button 15 on forth joystick.
Joystick4Button16 Button 16 on forth joystick.
Joystick4Button17 Button 17 on forth joystick.
Joystick4Button18 Button 18 on forth joystick.
Joystick4Button19 Button 19 on forth joystick.
Joystick5Button0 Button 0 on fifth joystick.
Joystick5Button1 Button 1 on fifth joystick.
Joystick5Button2 Button 2 on fifth joystick.
Joystick5Button3 Button 3 on fifth joystick.
Joystick5Button4 Button 4 on fifth joystick.
Joystick5Button5 Button 5 on fifth joystick.
Joystick5Button6 Button 6 on fifth joystick.
Joystick5Button7 Button 7 on fifth joystick.
Joystick5Button8 Button 8 on fifth joystick.
Joystick5Button9 Button 9 on fifth joystick.
Joystick5Button10 Button 10 on fifth joystick.
Joystick5Button11 Button 11 on fifth joystick.
Joystick5Button12 Button 12 on fifth joystick.
Joystick5Button13 Button 13 on fifth joystick.
Joystick5Button14 Button 14 on fifth joystick.
Joystick5Button15 Button 15 on fifth joystick.
Joystick5Button16 Button 16 on fifth joystick.
Joystick5Button17 Button 17 on fifth joystick.
Joystick5Button18 Button 18 on fifth joystick.
Joystick5Button19 Button 19 on fifth joystick.
Joystick6Button0 Button 0 on sixth joystick.
Joystick6Button1 Button 1 on sixth joystick.
Joystick6Button2 Button 2 on sixth joystick.
Joystick6Button3 Button 3 on sixth joystick.
Joystick6Button4 Button 4 on sixth joystick.
Joystick6Button5 Button 5 on sixth joystick.
Joystick6Button6 Button 6 on sixth joystick.
Joystick6Button7 Button 7 on sixth joystick.
Joystick6Button8 Button 8 on sixth joystick.
Joystick6Button9 Button 9 on sixth joystick.
Joystick6Button10 Button 10 on sixth joystick.
Joystick6Button11 Button 11 on sixth joystick.
Joystick6Button12 Button 12 on sixth joystick.
Joystick6Button13 Button 13 on sixth joystick.
Joystick6Button14 Button 14 on sixth joystick.
Joystick6Button15 Button 15 on sixth joystick.
Joystick6Button16 Button 16 on sixth joystick.
Joystick6Button17 Button 17 on sixth joystick.
Joystick6Button18 Button 18 on sixth joystick.
Joystick6Button19 Button 19 on sixth joystick.
Joystick7Button0 Button 0 on seventh joystick.
Joystick7Button1 Button 1 on seventh joystick.
Joystick7Button2 Button 2 on seventh joystick.
Joystick7Button3 Button 3 on seventh joystick.
Joystick7Button4 Button 4 on seventh joystick.
Joystick7Button5 Button 5 on seventh joystick.
Joystick7Button6 Button 6 on seventh joystick.
Joystick7Button7 Button 7 on seventh joystick.
Joystick7Button8 Button 8 on seventh joystick.
Joystick7Button9 Button 9 on seventh joystick.
Joystick7Button10 Button 10 on seventh joystick.
Joystick7Button11 Button 11 on seventh joystick.
Joystick7Button12 Button 12 on seventh joystick.
Joystick7Button13 Button 13 on seventh joystick.
Joystick7Button14 Button 14 on seventh joystick.
Joystick7Button15 Button 15 on seventh joystick.
Joystick7Button16 Button 16 on seventh joystick.
Joystick7Button17 Button 17 on seventh joystick.
Joystick7Button18 Button 18 on seventh joystick.
Joystick7Button19 Button 19 on seventh joystick.
Joystick8Button0 Button 0 on eighth joystick.
Joystick8Button1 Button 1 on eighth joystick.
Joystick8Button2 Button 2 on eighth joystick.
Joystick8Button3 Button 3 on eighth joystick.
Joystick8Button4 Button 4 on eighth joystick.
Joystick8Button5 Button 5 on eighth joystick.
Joystick8Button6 Button 6 on eighth joystick.
Joystick8Button7 Button 7 on eighth joystick.
Joystick8Button8 Button 8 on eighth joystick.
Joystick8Button9 Button 9 on eighth joystick.
Joystick8Button10 Button 10 on eighth joystick.
Joystick8Button11 Button 11 on eighth joystick.
Joystick8Button12 Button 12 on eighth joystick.
Joystick8Button13 Button 13 on eighth joystick.
Joystick8Button14 Button 14 on eighth joystick.
Joystick8Button15 Button 15 on eighth joystick.
Joystick8Button16 Button 16 on eighth joystick.
Joystick8Button17 Button 17 on eighth joystick.
Joystick8Button18 Button 18 on eighth joystick.
Joystick8Button19 Button 19 on eighth joystick.

猜你喜欢

转载自blog.csdn.net/renkai0406/article/details/70196755