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)
????????{
????????????//此處是軸向為負向時的操作
????????}
七、自我小結:
?在適配手柄操作時,主要的注意點就是按鍵值和軸向的匹配,不同的手柄有時對應的鍵值也會不一樣,所以各位看官,上述的只是一個參考,具體的還需要以你項目中使用的實際手柄為準,最好是能準備幾套方案已做到更好的玩家體驗!
總結
以上是生活随笔為你收集整理的Unity对于手柄的支持的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 弹性布局介绍
- 下一篇: HTC View 手柄操作简介