日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity对于手柄的支持

發布時間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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对于手柄的支持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。