Unity Input
Unity需要通过键盘、鼠标、手柄、摇杆来获取玩家对游戏的控制。你可以在 Input窗口设置按钮和虚拟轴,在代码中通过Input类监听玩家控制。游戏发布后玩家也可以在设置对话框中自行设置相关按键。
添加及设置输入轴
Unity中打开Edit->Project Settings->Input面板,界面如下:
此项目中只有10个输入轴,如果你想添加自己的输入轴,只需要更改Size属性。Size表示你所有输入轴的数量。接下来我们看下每个输入轴里面的各个属性。
* Name: 该输入轴的名称,相当于ID,在代码中我们可以根据该属性引用对应的输入轴;
* Descriptive Name: 游戏设置对话框中输入轴的名称,方便玩家设置对应按键;
* Descriptive Negative Name: 和Descriptive Name差不多,只是表示相反方向;
* Negative Button :对应于键盘、鼠标、手柄上的按键,并且是该控制的反向轴;
* Positive Button: 对应于键盘、鼠标、手柄上的按键,并且是该控制的正向轴;
* Alt Negative Button: Negative Button的备选按键;
* Alt Positive Button: Positive Button的备选按键;
* 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我们来看一个例子:
以水平轴为例,在代码中我们这样写:
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里面的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 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. |