關於Unity中的Input輸入事件


截獲鼠標,鍵盤的消息

監聽事件我們都是在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