Unity鍵位輸入及Input類(借鑒大神,作為筆記)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM