ゲームパッドでUnityのゲームを動かそう

(フル……フル……)
そめ先生
どうしたんっすか?
自分のゲームを
ゲームパッドで遊びだいぃッ!!!
!?


Unityで作ったゲームを、せっかくだからゲームパッドで遊べるようにしたい。多くの人が考えることではないだろうか。しかしこのゲームパッド対応が結構クセ者なのだ。色々調べることが多くて今までに多くのUnity初心者を悩ませてきたという。

ゲームパッド対応してると
一部の審査員のウケもいいんだよな~
まじっすか!!
単純に遊びやすいし
同じゲームでも面白く感じられるからね


一度やり方を覚えれば今後の人生でずっと使えるノウハウでもある。ちょうどそめ先生も自分の3Dゲームをゲームパッドでグリグリ動かしてみたいと思っていたので実装にチャレンジしてみた!今回はその情報をお届けしよう。

ちなみにゲームパッド非対応のプロジェクトを後からゲームパッド対応にすることもできるが、色々と面倒なことが多いし、不具合につながりかねない。もしこれからゲームを作ろうとしているなら、先に覚えて実装していったほうがいいぞ!

使用するゲームパッド

PCゲーム界で
一番スタンダードな(多分)
これを使わせてもらう


どぉーん。Microsoftゲームコントローラーです。Amazonで買えるが家電量販店でも売ってるぞ

他にも安価なゲームパッドが
売ってるみたいなんすけど……
設定とか色々違いすぎて
調査しきれないんだ ごめんな

コレ買っとけば間違いないから
コレで説明させてもらうやで



PC(Windows)用に有線&USB接続可能なものであることを確認しよう

Macをお使いの場合

残念ながらXboxコントローラはそのままでは動かない。ナントカして動くようにしよう。

こことかここ
参考にしてみてくれぃ
さすが他力本願先生っす!
kan_kikuchi先生と太田アベル先生に
感謝っす!


Unityでゲームパッド対応に当たってやること

1)操作スクリプト内で Input.GetAxis("Vertical") と Input.GetAxis("Horizontal") を使ってジョイスティックに対応する
2)操作スクリプト内で Input.GetButtonDown("ボタン名") を使ってボタン操作に対応する
3)Unityエディタ上のInputManagerで対応するボタンを割り当てる


1)のInput.GetAxisは
前に使ったっすね!
キーボードにもジョイスティックにも
対応してるスタンダードな
入力メソッドだね

このブログでの使用例は
この記事を参考にしてくれぃ


操作スクリプト内で Input.GetButtonDown("ボタン名") を使う

Input.GetKey("キー名")というキーボードの入力を判定するメソッドがあるが、Input.GetButtonDownはゲームパッドのボタン入力を判定するメソッドだ。スクリプト上での記述の仕方は基本的に同じ。||(orを示す記号)を使うことでキー入力と両方有効にすることもできる。

この記事で紹介した3Dモデルをコントロールするスクリプトに書き加えてみたのがこちら。50-53行目でキー入力とボタン入力のメソッドを記述している。



ここではアニメーターコントローラへのBool(TrueかFalseかのゼロイチ判定)に使っている。どのように使うかはゲーム次第なのだが、基本的にはInput.GetKeyと同じように使える。インターネット上で見つけたスクリプトを改造するときは同じように記述してみよう。

Unityエディタ上のInputManagerで対応するボタンを割り当てる

Unityエディタ上部にあるメニューからEdit → ProjectSettings → Inputを選択しよう。インスペクタービューに「InputManager」が表示され、一番上のAxesをクリックすると一覧が表示される。ここでゲームパッドによるボタン入力が、Unity内でどの入力と判定されるかを設定できる。文字通りInputManagerというわけだ。

説明がタイヘンなので
GIF動画で説明すっぞ
おっすおっす!



InputManager設定の様子。色々な表示があるが、作り変えるところは少ない



InputManagerの中にデフォルトで項目が用意されているFire1~Fire3の名前を変更しよう。これはUnity作った人々が「とりあえずファイヤーって書いとけばピストル撃つのに使ってくれるやろ」と書いてるだけなので(多分)勝手に書き換えてよい。ここで設定した名前(Name)がボタンの名前になり、スクリプト上で記述することとなる。上のGIF動画ではAction 1~Action 3と書いた。

次にPositive Buttonの項目、left ctrl と書かれているところを書き換えよう。ここでボタンナンバーを割り振る。上のGIF動画ではjoystick button 0~joystick button 2と書いた。0はXboxコントローラーのAボタン、1はBボタン、2はXボタンに相当する。



Unityで使われるキー名、ボタン名は上のとおり。こちらのページに記述されている。ボタンならjoystick button 0というように書く。末尾がボタンナンバーで、ゲームパッドのどのボタンかを割り振るわけだ。

Xboxゲームコントローラーの
ボタンナンバーは
以下のとおりだ



ボタンナンバー表。こちらのページから抜粋させていただいた


Windowsの場合




Macの場合

あれ?WindowsとMacで
番号が違うっすか?
そのようだな
それだと操作が
変わっちゃいませんか?
おそらくそうだろう
えー!そりゃ困るっす!
すまんな 仕様らしいんや
番号がかぶらないように
両方のプラットフォームの入力を
スクリプトに書いておいてくれ
がぁーん!!



「これは闇だねェ……。」
「これねー、おかしいんだよねー。なんとかならないのかなーって思いますよー。初めてコレ使ったときも大変だったんだよねー」

とUnity村の長老の方々もおっしゃっているのでそういうことなのだろう



たぶん高度な対策方法はあると思うが、Unity上級者以外がボタンナンバー7~9番を使う時はWindowsとMacでかぶらないように使おう。ちなみにいずれかのInputを選択した状態でCtrl+Dを押すとInputを複製コピーできる。同じようなInputを多数作りたいときは複製コピーして増やし、設定しよう。

実際にプレイ


アクションシーンはGIF動画だとカクカクになってしまうエンコ殺しなので動画にて。ゲームパッドのボタン入力に反応してBoolにチェックが入り、スクリプトによってアニメーション遷移が行われている様子。はぁー、プログラミングってすごいんやねぇ

うおー!
3Dモデルが、ゲームパッドで
グリグリ動いてるっすよ!
まるで本物のゲームみたいだぜ……
なあ たにっこ君よ……


自分のゲームがゲームパッドで動く。これは思った以上にスゴイ気分になれるのと、遊んでくれる人にとっても操作がより面白く感じられるようになる。興味があればぜひ自分のゲームに取り入れてみてほしい!