Unity對於手柄的支持

今天來談談關於Unity手柄的支持

一、首先我們先要搞清楚從哪開始進行控制:

二、接着來看看它裏面的屬性:

Name:【按鍵名】該鍵的名稱,可以在腳本編程中直接引用他。比如:Input.GetButtonDown(“Jump”);

Descriptive Name:【描述名】在遊戲的獨立機構中的配置對話框中,當控制值爲正時候所顯示的名稱。默認空白。

Negative Descriptive Name:【負描述】在遊戲的獨立機構中的配置對話框中,當控制值爲負的時候所顯示的名稱。

Nagative Button:【負向按鈕】玩家按下這個按鈕來讓被控制物體向負方向運動。

Positive Button:【正向按鈕】玩家按下這個按鈕讓被控制物體向正方向運動。

Alt Negative Button: 玩家可以使用的備選負向按鈕,比如方向鍵和WASD

Alt Positive Button:玩家可以使用的備選爭相按鈕。

Gravity:【重力】如果玩家停止輸入,該軸將恢復到空擋或0速度,其單位爲單位每秒。

Dead:【盲區】可以用在模擬控制。在模擬控制器上,在這個範圍內的任何值都會映射到空檔不會提供任何輸入。

Sensitivity:【靈敏度】可以用於數字控制,他是該軸向給定得值移動的速度。正負都可,單位爲單位每秒。

Snap:【對齊】如果選中,可以確保在同時按下正向和負向按鈕時候該軸的值爲空擋。

Invert:【反轉】迅速交換正向和負向控制鍵。

Type:【類型】該鍵對應的輸入設備類型。可以爲Key,MouseButton,MouseMove,JoystickAxis,或Window Movement。

Axis:【軸】這個控制方式有該輸入設備的哪條軸指揮。這可受不同遊戲手柄影響。

JoyNum:【操作杆編號】多個操作杆在機器上市後,決定哪個哪個操作杆控制給定的軸。可以選擇從所有的操作杆接受輸入,或是爲其制定一個特定的。

三、Input類的實現方式:

GetAxis();返回制定軸得值。

GetButton():如果制定的按鈕按下,返回True。

GetKey():如果制定按鍵按下返回True。

GetMouseButton():制定鼠標按鈕按下返回True。

ResetInputAxis():使用這個函數可以重置雖有輸入,並把他們護膚到空擋或0.

anyKey:任意鍵按下返回True。比如:按任意鍵繼續。

MousePisition:使用向量來保存鼠標在屏幕上當前位置。屏幕左下角映射爲(0,0);

四、OK,瞭解了從哪控制後,那麼現在開始我們就要實現怎麼控制它!

這裏我們以市面上常用的北通手柄爲例,來進行探討:

如圖,是手柄上所有鍵位介紹,那麼接下來我們就開始測試這些鍵位在Unity中都是對應的哪些值,不多說,直接上代碼

using UnityEngine;
using System.Collections;
using System;
 
 
/// <summary>
/// 測試遊戲手柄鍵值
/// </summary>
public class PlayerJoystickClass : MonoBehaviour
{
    private string currentButton;//當前按下的按鍵
 
    // Use this for initialization 
    void Start()
    {
 
    }
    // Update is called once per frame 
    void Update()
    {
        var values = Enum.GetValues(typeof(KeyCode));//存儲所有的按鍵
        for (int x = 0; x < values.Length; x++)
        {
            if (Input.GetKeyDown((KeyCode)values.GetValue(x)))
            {
                currentButton = values.GetValue(x).ToString();//遍歷並獲取當前按下的按鍵
            }
        }
    }
    // Show some data 
    void OnGUI()
    {
        GUI.TextArea(new Rect(0, 0, 250, 40), "Current Button : " + currentButton);//使用GUI在屏幕上面實時打印當前按下的按鍵
    }
}

將測試出來的鍵值打印到面板上面
測試出來的結果如下:

LT/L2:JoystickButton8
RT/R2:JoystickButton9
LB/L1:JoystickButton6
RB/R2:JoystickButton7
A:JoystickButton0
B:JoystickButton1
X:JoystickButton3
Y:JoystickButton4
Back:JoystickButton10
Start:JoystickButton11
Menu:JoystickButton12
左軸按下:JoystickButton13
右軸按下:JoystickButton14

五、現在鍵值都出來了,那接下來的事情就簡單多了,Unity獲取對按鍵的處理無非就這幾種:

  1         if (Input.GetKey(KeyCode.A))
            {
                //獲取到鍵後的操作
            }
  2       if (Input.GetKeyDown(KeyCode.A))
            {
                //獲取到鍵並按下後的操作
            }
  3         if (Input.GetKeyUp(KeyCode.A))
            {
                //獲取到鍵並擡起後的操作
            }

在此強烈建議使用第三種,因爲本人親測前兩種或觸發多次操作,很蛋疼

六、上面的只是介紹了按鍵的操作,但是這是手柄呀,他是有搖桿的,那麼這些軸需要怎麼操作呢,別急,接下來我們就開始收拾他

北通手柄上面的軸有四處(以上面的圖片爲例)

軸向比較特殊,需要自己進行添加設置(Unity中的軸向一般都是水平和垂直軸)

 

1、左軸

2、右軸

3、十字鍵軸

4、LT/L1/RT/R1所在的軸

現在知道這些軸向了,直接使用API方法

因爲Input.GetAxis("")返回的是一個(-1,1)的範圍值,所以我們根據這個值可以判定按鍵的方向

if (Input.GetAxis("自定義的軸向名字") > 0 && Input.GetAxis("自定義的軸向名字") < 1)
        {
            //此處是軸向爲正向時的操作
        }
if (Input.GetAxis("自定義的軸向名字") < 0 && Input.GetAxis("自定義的軸向名字") > -1)
        {
            //此處是軸向爲負向時的操作
        }

七、自我小結:

 在適配手柄操作時,主要的注意點就是按鍵值和軸向的匹配,不同的手柄有時對應的鍵值也會不一樣,所以各位看官,上述的只是一個參考,具體的還需要以你項目中使用的實際手柄爲準,最好是能準備幾套方案已做到更好的玩家體驗!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章