Unity中的输入事件总结与数字电视遥控器键值映射

一、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

Unity中的输入事件总结与数字电视遥控器键值映射_第1张图片


五、获取键盘或者各电视遥控器键值用于输入事件适配

//
//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


你可能感兴趣的:(Unity3D)