Unity之xbox手柄控制交互邏輯

一、手柄按鍵及軸向

在這裏插入圖片描述

1)按鍵

  • Unity引擎的KeyCode中已經包含了手柄按鍵的枚舉。
  • 按鍵從0到19,JoystickButton0和Joystick1Button0都表示0鍵,只是兩個手柄而已。
  • 通過Input.GetKeyDown(KeyCode.JoystickButton0)可以驗證對應的按鍵值。

2)軸向

  • 3rd axis triggers控制着LT和RT;主搖桿是X axis和Y axis,即Horizontal和Vertical;副搖桿是5th axis和4th axis;十字鍵是6th axis和7th axis。
  • 軸向需要在Edit->Project Settings->Input裏面自行設定。
    在這裏插入圖片描述

二、手柄管理類

通過步驟一,我們得知了手柄的按鍵及軸向的設置及調用,接下來我們需要整合一個管理類。

1)通過十字鍵(上下左右移動)控制聚焦UI物體的選中態切換
float x = Input.GetAxis(「對應十字鍵6th axis的名字」);
float y = Input.GetAxis(「對應十字鍵5th axis的名字」);

通過x和y值綁定四個方向的函數SetAxisDir(AxisDir dir);方向函數存儲在list容器中,使用計時器在Update中執行對應方向的委託事件(可以自定義執行間隔時間)。
在這裏插入圖片描述

ps:當本場景被註銷時,需要調用CancelAllDirEvents,不然會有上個場景的事件執行時找不到對象的錯誤(管理類常駐,DontDestroyOnLoad)。

2)通過主搖桿控制人物(攝像機)移動
如果僅通過單個軸向去做處理的話,不能適配搖桿360°可旋轉的特性。這裏介紹一個原生API解決這個問題:Vector2.ClampMagnitude(new Vector2(x, y), 1f);

ps:Vector3也有這個方法。

3)通過副搖桿控制人物(攝像機)旋轉
因爲業務的需求,不可讓人物360°旋轉,即需要一定的角度限制。這裏介紹一個原生API解決這個問題:float angle = Mathf.Clamp(angle, minAngle, maxAngle);

pps:所有軸向的調用獲取是通過Input.GetAxis(「對應軸向名稱」);具體軸向對應方向獲取的值的正負請自行驗證 =_=