- 排名
- 5013
- 昨日變化
 
- UID
- 138273
- 好友
- 0
- 蠻牛幣
- 429
- 威望
- 0
- 注冊時間
- 2016-3-3
- 在線時間
- 454 小時
- 最后登錄
- 2021-8-2
|
我也是小白,新做的游戲也遇到同樣的問題,就分享下經驗吧。先答主要的問題,關于同時支持鍵盤和手柄,其實應該本身并不沖突,如果是本身的input manager ,例如下:
if(Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.JoystickButton0)) //這樣應該就是按下鍵盤A鍵和手柄JoystickButton0映射的鍵都可以執行,有點忘了
{
print(\"1\");
}
但是同時支持ps4和xbox就麻煩很多,因為unity本身的input manager的映射名稱很坑爹,你應該也查到過,同一個編號名稱在不同手柄是不同的鍵。
有一句代碼Input.GetJoystickNames()可以獲取到當前連接的手柄名稱列表,下面是我用的方法,大致的相關代碼:
public string[] JoyStickNames;
void Update()
{
JoyStickNames = Input.GetJoystickNames();
for (int x = 0; x < JoyStickNames.Length; x++)
{
if (JoyStickNames[x] != \"\")
{
if (JoyStickNames[x].Contains(\"Xbox\") || JoyStickNames[x].Contains(\"XBOX\")) //這個語句意思是獲取的手柄名稱里 包含了 Xbox或者XBOX這幾個字
{
print(\"連接了xbox手柄\");
}
else if (JoyStickNames[x].Contains(\"Wireless\") //ps4的手柄名稱默認是無線手柄的英文,沒有ps的字樣
{
print(\"連接了ps4手柄\");
}
}
判斷了手柄之后又再更換按鍵映射的名稱,對應到不同手柄的相同的鍵,很麻煩,非常不推薦。
對于手柄適配,比較建議用插件輔助做或者unity新的input System,都有可視化的編輯界面,比純寫代碼好得多,也對非程序員更加友好,B站油管也有相關的教學視頻。
插件比較主流的叫Rewired,在unity asset store里45美金,用插件可以支持手柄震動,因為unity本身貌似一直沒有這個,并且插件本身支持了足夠多的控制器,遠不止ps4和xbox。這個插件可以跟input manager共用,代碼也跟input manager用法一樣,看一下插件的文檔或者網上查查大致就可以了。
unity新的input System,之前試過一下,大眾的手柄都支持,而且編輯界面有一定省去寫代碼的作用,就是可以選哪個鍵觸發的哪些功能,可以不在代碼里再寫if (Input啥啥鍵)的那些,不過也就方便一點點,但是不能跟input manager共用,而且還是新版本的測試功能,會有很多坑爹的問題。
而且最重要的,以上兩者對于手柄按鍵有重新的映射,都通過按鍵的位置來映射,比如說按肩鍵1肩鍵2來映射,而不是像原本的input manager那樣JoystickButton0123465789的編號,就不需要再自己判斷插入的是ps4還是xbox手柄然后再換不同的按鍵編號了。
|
|