今天來談談關於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)
{
//此處是軸向爲負向時的操作
}
七、自我小結:
在適配手柄操作時,主要的注意點就是按鍵值和軸向的匹配,不同的手柄有時對應的鍵值也會不一樣,所以各位看官,上述的只是一個參考,具體的還需要以你項目中使用的實際手柄爲準,最好是能準備幾套方案已做到更好的玩家體驗!