一、Unity的基本輸入事件(最常用):
1 . 獲得鍵盤
Input.GetKey(KeyCode.A)
Input.GetKeyDown(KeyCode.A)
Input.GetKeyUp(KeyCode.A)
2.獲得鼠標信息
Input.mousePosition // 鼠標位置
Input.GetMouseButton 獲取按鈕
3.軸輸入
Input.GetAxis 獲取軸
根據坐標軸名稱返回虛擬坐標系中的值。
使用控制器和鍵盤輸入時此值范圍在-1到1之間;
1、Input類中的常用屬性
屬性名
類型
屬性類型
含義
anyKey
bool
get
獲取任意鍵按住
anyKeyDown
bool
get;
獲取任意鍵按下
mousePosition
Vector3
get;
獲取鼠標移動的坐標
2、Input類中常用屬性
(1)、GetKey(KeyCode key)
方法類型:靜態。
參數:key—鍵盤上的某個鍵。
返回值:bool—當鍵盤上某個鍵被一直按住的時候,其返回值為true,否則為false。
含義:檢測鍵盤上的某個鍵是否被一直按住,如果該鍵一直按住,其返回值為true,否則為false。
重載方法:GetKey(string name)
(2)、GetKeyDown(KeyCodekey)
方法類型:靜態。
參數:key—鍵盤上的某個鍵。
返回值:bool—當鍵盤上某個鍵被按下的時候,其返回值為true,否則為false。
含義:檢測鍵盤上的某個鍵是否被按下,如果該鍵被按下,其返回值為true,否則為false。
重載方法:GetKeyDown(string name)
(3)、GetKeyUp(KeyCodekey)
方法類型:靜態。
參數:key—鍵盤上的某個鍵。
返回值:bool—當鍵盤上某個鍵按下之后抬起的時候,其返回值為true,否則為false。
含義:檢測鍵盤上的某個鍵是否被按下之后抬起,如果該鍵被按下之后抬起,其返回值為true,否則為false。
重載方法:GetKeyUp (string name)
(4)、GetMouseButtonDown(intbutton)
方法類型:靜態。
參數:button—表示鼠標上的鍵,0:表示鼠標左鍵,1:表示鼠標右鍵,2表示鼠標中鍵,3:表示鼠標上鍵,4:表示鼠標下鍵(其中3和4件不經常用,因為有的鼠標上沒有這兩個鍵)。
返回值:bool—當鼠標上某個鍵被按下之后,其返回值為true,否則為false。
含義:檢測鼠標上的某個鍵是否被按下,如果該鍵被按下,其返回值為true,否則為false。
(5)、GetAxis(stringaxisName)
方法類型:靜態。
參數:axisName—軸向,Horizontal:表示水平方向,其值從-1到1之間變化,當A鍵被按下的時候其在水平方向上的向量為0-1(取不到0),當D鍵被按下的時候其在水平方向上的向量為-1-0(取不到0),當A鍵和D鍵都沒有被按下的時候,其水平方向上的向量為0;Vertical:表示豎直方向,其值從-1到1之間的變化,當W鍵被按下的時候其在豎直方向上的向量為0-1(取不到0),當S鍵被按下的時候其在豎直方向上的向量為-1-0(取不到0),當S鍵和W鍵都沒有被按下的時候,其豎直方向上的向量為0。
返回值:float—按下設定的某個鍵之后,表示變化的數值,從-1到1之間變化。
含義:檢測鍵盤上某個按鍵被一直按住的時候,其在設定的方向上的變化。
鼠標點擊:
Input.GetMouseButtonDown(0) //鼠標左鍵按下
Input.GetMouseButtonDown(1) //鼠標右鍵按下
Input.GetMouseButtonUp(0) //鼠標左鍵抬起
Input.GetMouseButtonUp(1) //鼠標右鍵抬起
鍵盤事件:
Input.GetKeyDown(KeyCode.鍵值) //鍵盤按下
Input.GetKeyUp(KeyCode.鍵值) //鍵盤抬起
常用的鍵值:
KeyCode.大寫字母A-Z //字母鍵
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
二、獲取鍵盤或者各電視遙控器鍵值用於輸入事件適配
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 小鍵盤“=”
-----------------------------------------------------------------
補充
截獲鼠標,鍵盤的消息
監聽事件我們都是在Update里面監聽的。
Unity的虛擬軸打開:Edit-->Project Settings-->Input,打開的各個Name就是雙引號里面要填的,記不住就打開查,也可以自己定義一些按鍵。
一、Input的主要變量
1: mousePosition: 當前鼠標的像素坐標;
2: anyKey/anyKeyDown: 當前是否有按鍵按住;
3: inputString: 本次update時間間隔內輸入的字符串;
4: acceleration: 重力加速度傳感器的值,加速度的方向;
5: touches: 返回當前所有觸摸對象的列表Touch[],觸摸屏可以支持多根手指軌跡;
二、Input的主要方法
1: GetAxis/GetAxisRaw: 返回表示虛擬軸的值:
2: GetButton/GetButtonDown/GetButtonUp 虛擬按鈕
3: GetKey/GetKeyDown/GetKeyUp 按下制定按鈕;
4: GetMouseButton
GetMouseButtonDwon
GetMouseButtonUp
5: GetTouch(index) 返回當前觸控Touch對象;
6: 打開InputManager: 配置虛擬軸;
三、Input使用實例
1.創建一個Canvas
2.對Canvas進行初始化
3.創建一個Image的UI節點作為Canvas的子節點,名字叫bg,拖進背景圖片到這個節點中。
4.創建一個叫Game_scene的腳本,掛載到Canvas下面
5.Game_scene腳本內容:
void Update () { // 以屏幕的左下腳為原點; // Debug.Log(Input.mousePosition); // 當前鼠標的位置; // 如果一個按鍵一直按住,那么每幀都會返回True,只到彈起; // 鍵盤,鼠標的key /*if (Input.anyKey) { Debug.Log(Input.anyKey); }*/ // 檢測按鍵按下,但是,一旦按下以后,后面就不觸發了。 // 如果一個按鍵一直按着,那么這個只會按下的那幀觸發true, /*if (Input.anyKeyDown) { Debug.Log(Input.anyKeyDown); }*/ // 返回你在本次update里面輸入的assic字符 /*if (Input.inputString.Length > 0) { Debug.Log(Input.inputString); }*/ // end // 重力加速度的方向,那你就可以根據這個方向來獲得輸入。 // 如果沒有重力傳感器,那么就是(0, 0, 0); Vector3的對象; // Debug.Log(Input.acceleration); // Debug.Log(Input.touchCount); // 獲得當前的觸摸的事件的個數; /*if (Input.touchCount > 0) { // Input.touches // Touch []; }*/ // Horizontal 是這個虛擬軸,Eidt --> ProjectSetting -->Input // 由1-->0, 遞減的插值的; // GetAxis 變化的時候,是有插值的。 // float value = Input.GetAxis("Horizontal"); /*float value = Input.GetAxisRaw("Horizontal"); if (value != 0.0f) { Debug.Log(value); }*/ // 距離上一次鼠標的變化; dx, dy /*float mouse_dx = Input.GetAxis("Mouse X"); float mouse_dy = Input.GetAxis("Mouse Y"); Debug.Log(mouse_dx + ":" + mouse_dy);*/ // 不會有插值的,1,0 // float value = Input.GetAxisRaw("Jump"); // Debug.Log(value); // 鼠標左鍵, /*if (Input.GetButton("Fire1")) { Debug.Log("fire1 click"); }*/ // 只是在按鈕,按下那一刻,為真, /*if (Input.GetButtonDown("Fire1")) { Debug.Log("fire1 down"); } //彈起來那一刻為真 if (Input.GetButtonUp("Fire1")) { Debug.Log("fire1 up"); }*/ // 鍵盤上的P按鍵, 如果按下不松,會一直為true // GetKeyDown, GetKeyUp,只在狀態改變的時候為真 /*if (Input.GetKeyDown(KeyCode.P)) { Debug.Log("Key p down"); } if (Input.GetKeyUp(KeyCode.P)) { Debug.Log("Key p up"); } if (Input.GetKey(KeyCode.P)) { Debug.Log("P"); }*/ // 判斷鼠標按鍵有沒有按下, int button(0(左), 1(右), 2(中)) if (Input.GetMouseButtonDown(2)) { Debug.Log("mouse left down"); } if (Input.GetMouseButtonUp(2)) { Debug.Log("mouse left up"); } // Move來使用。 if (Input.GetMouseButton(2)) { Debug.Log("mouse left all ways"); } }
四、虛擬軸定義
1: Name: 軸的名字;
2: Descriptive: 正向方向描述;
3: Button:正向反向按鈕和附加按鈕;
4: Gravity:復位的速度,用於按鍵和鼠標;
5: Dead: 小於該值的輸入值, 都會被視為0,用於搖桿。
6: Sensitivity(靈敏度): 對於鍵盤輸入,該值越大則響應時間越快,該值越小則越平滑。對於鼠標輸入,設置該值會對鼠標的實際移動距離按比例縮放
7: Snap對齊: 如果啟用該設置,當軸收到反向的輸入信號時,軸的數值會立即置為0,僅用於鍵/鼠標 輸入。
8:Invert 反轉: 啟用該參數可以讓正向按鈕發送負值,反向按鈕發送正值。
9:Type 類型: 所有的按鈕輸入都應設置為 鍵/鼠標 (Key / Mouse) 類型,對於鼠標移動和滾輪應設為 鼠標移動(Mouse Movement)。搖桿設為搖桿軸 (Joystick Axis),用戶移動窗口設為窗口移動 (Window Movement)。
10:Axis 軸: 設備的輸入軸(搖桿,鼠標,手柄等)
11:Joy Num 搖桿編號: 設置使用哪個搖桿。默認是接收所有搖桿的輸入。僅用於輸入軸和非按鍵。
五、Touch對象
1:fingerID; 手指ID
2: position 手指位置
3: deltaPosition 距離上一次的偏移;
4: phase: 觸摸相位TouchPhase.Began Moved, cancel, ended;
5: Touch事件同時會觸發 GetMouseButton(0)事件,能夠使用Input.GetAxis("Mouse X/Y")獲取觸摸偏移位置;
6: 到底用Touch還是用Mouse,如果對觸摸的准確性要求不高,可以使用Mouse,否則還是區別對待,使用Touch,如果要多點觸控,那么自己判斷,直接自己使用Touch
void Update () {
if (Input.touchCount > 0) { Touch t = Input.GetTouch(0); // t.position; //觸摸的位置; // t.deltaPosition; // 距離上一次,位置的偏移 // t.phase // 觸摸的相位,-->狀態, 按下,滑動,彈起,cancel; // Touch,只在移動設備上能用,所以統一,鼠標和這個Touch, // Touch同時也會發送一個 鼠標左鍵的事件,模擬一次鼠標左鍵; // GetMouseButton(0), 鼠標,和觸摸都可以當作鼠標事件來處理,那么 // 我們的代碼就只要寫一次。單點觸摸的時候。 // 多點觸摸,自己處理Touch事件。 // 單點觸控 // t.position, --> mousePostion; // t.deltaPosition --> Input.GetAxis("Mouse X/Y"); // Begin(Down), ended(Up), moved(Button) // end }
}