一、Unity的基本输入事件(最常用):
/*鼠标键盘事件靠在Update事件周期中不断检测触发:
*
* 鼠标点击:
* Input.GetMouseButtonDown(0) //鼠标左键按下
* Input.GetMouseButtonDown(1) //鼠标右键按下
* Input.GetMouseButtonUp(0) //鼠标左键抬起
* Input.GetMouseButtonUp(1) //鼠标右键抬起
*
* 键盘事件:
* Input.GetKeyDown(KeyCode.键值) //键盘按下
* Input.GetKeyUp(KeyCode.键值) //键盘抬起
*
* 常用的键值:
* KeyCode.大写字母 //字母键
* KeyCode.UpArrow
* KeyCode.DownArrow
* KeyCode.LeftArrow
* KeyCode.RightArrow
* KeyCode.Return //回车
* KeyCode.Escape //Esc返回
* KeyCode.Space //空格
* KeyCode.LeftControl
* KeyCode.RightControl
* KeyCode.LeftShift
* KeyCode.RightShift
* KeyCode.Tab
* KeyCode.Delete
* KeyCode.Backspace
*
*/
文章末尾有详细键值表!
二、数字电视遥控器输入事件的映射:
小米盒子遥控器的按键除了OK确认选定键其他基本跟unity的键盘相对应(数字电视中小米盒子比较特殊,跟其他数字电视不一样,键值映射要特殊考虑):
上下左右对应箭头,KeyCode.Escape是返回键(对应键盘的Esc),KeyCode.Menu是遥控器的菜单键(对应键盘的右contrl)
其中的确认键官方给出了说明方法是定义: KeyCode DPAD_CENTER = (KeyCode)10; 然后跟其他KeyCode一样检测DPAD_CENTER就可以了;
//测试获得数字电视的键值映射:
方向键:
上: KeyCode.UpArrow
下: KeyCode.DownArrow
左: KeyCode.LeftArrow
右: KeyCode.RightArrow
功能键:
OK键: KeyCode.JoystickButton0(小米盒子比较特殊,键值为:KeyCode MIOkKeyCode = (KeyCode)10;)
返回键: KeyCode.Escape
菜单键: KeyCode.Menu
测试Demo:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class XMInput : MonoBehaviour
{
public Text KeyCodeText; //显示按键状态的text文本
KeyCode DPAD_CENTER = (KeyCode)10; //定义确定键(适应于小米盒子遥控器)
private bool isLeft; //左键按下状态
private bool isRight; //右键按下状态
private bool isUp; //上键按下状态
private bool isDown; //下键按下状态
private bool isBack; //返回键按下状态
private bool isOk; //确定键按下状态
private float speed = 0.1f;
// 初始化
void Start ()
{
isLeft = false;
isRight = false;
isUp = false;
isDown = false;
isBack = false;
isOk = false;
}
// 按帧刷新检测
void Update () {
//监听按键事件:
//*** 按下 ***//
//左
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
isLeft = true;
KeyCodeText.text = "左键按下";
}
//右
if (Input.GetKeyDown(KeyCode.RightArrow))
{
isRight = true;
KeyCodeText.text = "右键按下";
}
//上
if (Input.GetKeyDown(KeyCode.UpArrow))
{
isUp = true;
KeyCodeText.text = "上键按下";
}
//下
if (Input.GetKeyDown(KeyCode.DownArrow))
{
isDown = true;
KeyCodeText.text = "下键按下";
}
//返回
if (Input.GetKeyDown(KeyCode.Escape))
{
isBack = true;
KeyCodeText.text = "返回键按下";
}
//回车
if (Input.GetKeyDown(DPAD_CENTER))
{
isOk = true;
KeyCodeText.text = "确认键按下";
}
//*** 抬起 ***//
//左
if (Input.GetKeyUp(KeyCode.LeftArrow))
{
isLeft = false;
KeyCodeText.text = "左键抬起";
}
//右
if (Input.GetKeyUp(KeyCode.RightArrow))
{
isRight = false;
KeyCodeText.text = "右键抬起";
}
//上
if (Input.GetKeyUp(KeyCode.UpArrow))
{
isUp = false;
KeyCodeText.text = "上键抬起";
}
//下
if (Input.GetKeyUp(KeyCode.DownArrow))
{
isDown = false;
KeyCodeText.text = "下键抬起";
}
//返回
if (Input.GetKeyUp(KeyCode.Escape))
{
isBack = false;
KeyCodeText.text = "返回键抬起";
}
//回车
if (Input.GetKeyUp(DPAD_CENTER))
{
isOk = false;
KeyCodeText.text = "确认键抬起";
}
}
void LateUpdate()
{
//左
if (isLeft)
{
transform.Translate(Vector3.left*speed);
}
//右
if (isRight)
{
transform.Translate(Vector3.right*speed);
}
//上
if (isUp)
{
transform.Translate(Vector3.up*speed);
}
//下
if (isDown)
{
transform.Translate(Vector3.down*speed);
}
//返回
if (isBack)
{
transform.Rotate(Vector3.left);
}
//确定
if (isOk)
{
transform.Rotate(Vector3.right);
}
}
}
三、NGUI中的冲突问题:
关于KeyCode的回车键有一个注意问题:在NGUI中回车键会自动触发,(可以到NGUI脚本序列化面板设置关掉),因此可能出现检测KeyCode的回车键,用户点击回车键会触发两次回车键事件,最好换成其他键代替回车避免冲突;
四、乐视39按键键值对照表:
图片来源:http://bbs.le.com/thread-187950-1.html
五、获取键盘或者各电视遥控器键值用于输入事件适配
//
//KeyCode.cs
//
// Created by [JiangXinhou]
//
// Copyright [email protected] (http://blog.csdn.net/cordova)
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class KeyCode : MonoBehaviour {
//显示键值信息的UI文本组件
public Text keycodeText;
//只能在OnGUI内获取键值
void OnGUI()
{
if (Input.anyKeyDown)
{
Event e = Event.current;
if (e.isKey)
{
keycodeText.text ="按下的键值:" + e.keyCode.ToString();
}
}
}
}
Unity键值表:
/** 鼠标键值 **/
Mouse0 鼠标左键
Mouse1 鼠标右键
Mouse2 鼠标中键
Mouse3 鼠标第3个按键
Mouse4 鼠标第4个按键
Mouse5 鼠标第5个按键
Mouse6 鼠标第6个按键
/** 键盘键值 **/
//方向键
UpArrow 方向键上
DownArrow 方向键下
RightArrow 方向键右
LeftArrow 方向键左
//F功能键
F1 功能键F1
F2 功能键F2
F3 功能键F3
F4 功能键F4
F5 功能键F5
F6 功能键F6
F7 功能键F7
F8 功能键F8
F9 功能键F9
F10 功能键F10
F11 功能键F11
F12 功能键F12
F13 功能键F13
F14 功能键F14
F15 功能键F15
//数字键
Alpha0 按键0
Alpha1 按键1
Alpha2 按键2
Alpha3 按键3
Alpha4 按键4
Alpha5 按键5
Alpha6 按键6
Alpha7 按键7
Alpha8 按键7
Alpha9 按键9
//字母键
A ‘a’键
B ‘b’键
C ‘c’键
D ‘d’键
E ‘e’键
F ‘f’键
G ‘g’键
H ‘h’键
I ‘i’键
J ‘j’键
K ‘k’键
L ‘l’键
M ‘m’键
N ‘n’键
O ‘o’键
P ‘p’键
Q ‘q’键
R ‘r’键
S ‘s’键
T ‘t’键
U ‘u’键
V ‘v’键
W ‘w’键
X ‘x’键
Y ‘y’键
Z ‘z’键
//功能键
Backspace 退格键
Delete Delete键
Tab Tab键
Clear Clear键
Return 回车键
Pause 暂停键
Escape ESC键
Space 空格键
Numlock Numlock键
Capslock 大小写锁定键
ScrollLockScroll Lock键
RightShift 右上档键
LeftShift 左上档键
RightControl 右Ctrl键
LeftControl 左Ctrl键
RightAlt 右Alt键
LeftAlt 左Alt键
LeftApple 左Apple键
LeftWindows 左Windows键
RightApple 右Apple键
RightWindows 右Windows键
AltGr Alt Gr键
Help Help键
Print Print键
SysReq Sys Req键
Break Break键
Insert Insert键
Home Home键
End End键
PageUp PageUp键
PageDown PageDown键
//符号键
Exclaim ‘!’键
DoubleQuote 双引号键
Hash Hash键
Dollar ‘$’键
Ampersand Ampersand键
Quote 单引号键
LeftParen 左括号键
RightParen 右括号键
Asterisk ‘ * ’键
Plus ‘ + ’键
Comma ‘ , ’键
Minus ‘ - ’键
Period ‘ . ’键
Slash ‘ / ’键
Colon ‘ : ’键
Semicolon ‘ ; ’键
Less ‘ < ‘键
Equals ‘ = ‘键
Greater ‘ > ‘键
Question ‘ ? ’键
At ‘@’键
LeftBracket ‘ [ ‘键
Backslash ‘ \ ’键
RightBracket ‘ ] ’键
Caret ‘ ^ ’键
Underscore ‘ _ ’键
BackQuote ‘ ` ’键
//小键盘
Keypad0 小键盘0
Keypad1 小键盘1
Keypad2 小键盘2
Keypad3 小键盘3
Keypad4 小键盘4
Keypad5 小键盘5
Keypad6 小键盘6
Keypad7 小键盘7
Keypad8 小键盘8
Keypad9 小键盘9
KeypadPeriod 小键盘“.”
KeypadDivide 小键盘“/”
KeypadMultiply 小键盘“*”
KeypadMinus 小键盘“-”
KeypadPlus 小键盘“+”
KeypadEnter 小键盘“Enter”
KeypadEquals 小键盘“=”
/** 游戏手柄键值 **/
JoystickButton0 手柄按键0
JoystickButton1 手柄按键1
JoystickButton2 手柄按键2
JoystickButton3 手柄按键3
JoystickButton4 手柄按键4
JoystickButton5 手柄按键5
JoystickButton6 手柄按键6
JoystickButton7 手柄按键7
JoystickButton8 手柄按键8
JoystickButton9 手柄按键9
JoystickButton10 手柄按键10
JoystickButton11 手柄按键11
JoystickButton12 手柄按键12
JoystickButton13 手柄按键13
JoystickButton14 手柄按键14
JoystickButton15 手柄按键15
JoystickButton16 手柄按键16
JoystickButton17 手柄按键17
JoystickButton18 手柄按键18
JoystickButton19 手柄按键19
Joystick1Button0 第一个手柄按键0
Joystick1Button1 第一个手柄按键1
Joystick1Button2 第一个手柄按键2
Joystick1Button3 第一个手柄按键3
Joystick1Button4 第一个手柄按键4
Joystick1Button5 第一个手柄按键5
Joystick1Button6 第一个手柄按键6
Joystick1Button7 第一个手柄按键7
Joystick1Button8 第一个手柄按键8
Joystick1Button9 第一个手柄按键9
Joystick1Button10 第一个手柄按键10
Joystick1Button11 第一个手柄按键11
Joystick1Button12 第一个手柄按键12
Joystick1Button13 第一个手柄按键13
Joystick1Button14 第一个手柄按键14
Joystick1Button15 第一个手柄按键15
Joystick1Button16 第一个手柄按键16
Joystick1Button17 第一个手柄按键17
Joystick1Button18 第一个手柄按键18
Joystick1Button19 第一个手柄按键19
Joystick2Button0 第二个手柄按键0
Joystick2Button1 第二个手柄按键1
Joystick2Button2 第二个手柄按键2
Joystick2Button3 第二个手柄按键3
Joystick2Button4 第二个手柄按键4
Joystick2Button5 第二个手柄按键5
Joystick2Button6 第二个手柄按键6
Joystick2Button7 第二个手柄按键7
Joystick2Button8 第二个手柄按键8
Joystick2Button9 第二个手柄按键9
Joystick2Button10 第二个手柄按键10
Joystick2Button11 第二个手柄按键11
Joystick2Button12 第二个手柄按键12
Joystick2Button13 第二个手柄按键13
Joystick2Button14 第二个手柄按键14
Joystick2Button15 第二个手柄按键15
Joystick2Button16 第二个手柄按键16
Joystick2Button17 第二个手柄按键17
Joystick2Button18 第二个手柄按键18
Joystick2Button19 第二个手柄按键19
Joystick3Button0 第三个手柄按键0
Joystick3Button1 第三个手柄按键1
Joystick3Button2 第三个手柄按键2
Joystick3Button3 第三个手柄按键3
Joystick3Button4 第三个手柄按键4
Joystick3Button5 第三个手柄按键5
Joystick3Button6 第三个手柄按键6
Joystick3Button7 第三个手柄按键7
Joystick3Button8 第三个手柄按键8
Joystick3Button9 第三个手柄按键9
Joystick3Button10 第三个手柄按键10
Joystick3Button11 第三个手柄按键11
Joystick3Button12 第三个手柄按键12
Joystick3Button13 第三个手柄按键13
Joystick3Button14 第三个手柄按键14
Joystick3Button15 第三个手柄按键15
Joystick3Button16 第三个手柄按键16
Joystick3Button17 第三个手柄按键17
Joystick3Button18 第三个手柄按键18
Joystick3Button19 第三个手柄按键19