ユニティちゃんをゲームパッドで動かしてみる(動かしたとは言っていない)

入力についておさらい

これまでの記事の中でInput.GetAxisとInput.GetButtonDownを使ってきたので、まぁ大体どんなものかは理解できてはいるが、本当に「まぁ大体こんなもんやろ」でいじってたので、あらためてマニュアルを読み直す。

docs.unity3d.com

Input Managerで、操作系統の定義を行い、

docs.unity3d.com

Inputクラスオブジェクトで入力メソッドを呼び出す。至極簡単である。
組み込み開発みたいにチャタリング除去をする必要もない。

尚、何故チャタリング除去しなければならないかというと、そもそもチャタリングがなんぞやという話をせねばなるまいが、長くなるのでこちらを読んで欲しい。

チャタリング - Wikipedia

簡単に言うと、「ボタン押した後、しばらくノイズ出てるから、一回確認するだけじゃダメなの。押した瞬間だけじゃなくってその後何度か確認して、全部オンだったらオンって言うね」(CV:血小板ちゃん)というのがチャタリング除去である。

尚、PCみたいに複雑なシステムでは、キーボードやゲームパッドの時点でこんなことは実施済みの為、Unity使いどころかPCプログラマが気にする必要はないだろう。

というわけで、いつもの余談である。

ちなみにモバイルを考慮してタッチ入力やジャイロ入力も実装されているが、これでGPSも入力できれば、サーキットデータロガーがお手軽に作れるなと思ったが本題ではないのでここでは置いておこう。

さておき、こうしてみると至れり尽くせりの入力環境だが、デフォルト設定では、

  • HorizontalVertical: w、a、s、d と矢印キー
  • Fire1Fire2Fire3: それぞれ Ctrl、Opt(Alt)、Cmd キー
  • Mouse XMouse Y: マウスの動きのデルタ
  • Window Shake XWindow Shake Y: ウィンドウの動作

と、受付ボタン数で言えばファミコン以下である。 
まぁ、SELECTとかSTARTとか除けば、メガドライブ相当にはなるけど。

docs.unity3d.com

スーパーマリオもどきやソニックもどきを作るのであればこれでも足りるが、アーマードコアっぽい白くべたつくなにかを作ろうというのに、これでは操作もままならぬ。

というか、PS2でこの操作体系が確立してから20年近くになるのに、それより歴史の浅いUnityが、デフォルトでこんなクッソ古い割り当てしかできていないのはいかがなものかと思う。

正直、業界標準にわざわざ設定し直さねばならないなど、無駄以外何物でもない作業なので、是非改善していただきたあい!!!(モズクス感)

必要なスティックとボタンを検討してみる

毎度長い前置きで申し訳ないが、これが当ブログのスタイルなのでアキラメロン。

さて、ゲームパッドのスティック/ボタンをどのように定義するかというところで、とりあえず以下のように決めた。

  • スティック2軸(左/右)
  • ボタン16個(上/下/左/右/×/〇/△/□/L1/L2/L3/R1/R2/R3/SELECT/START)

...と思ったが、あらためて数えると多い。
Input Managerに名前を登録することを考えると面倒なので、当面必要であると思われるスティック2軸と、ボタン1個を定義することにした。

で、ここで問題。どれがどれやねん。

わからん時は人の情報を漁るのが早い。

nn-hokuson.hatenablog.com

というわけで、Controller Testerを導入。

assetstore.unity.com

これで手持ちのコントローラを接続し、試してみた。
尚、PS3については出所不明のドライバを利用する為、参考までとされたい。

pg-fan.com

属性 PS4 PS3 PC(JC-U4013S)
軸1 左スティック水平 左スティック水平 左スティック水平
軸2 左スティック垂直 左スティック垂直 左スティック垂直
軸3 右スティック水平 右スティック水平 LT(L2)ボタン(positive)/
RT(R2)ボタン(negative)
軸4 L2ボタン
(リリースでnegative)
L2ボタン
(リリースでpositive)
右スティック水平
軸5 R2ボタン
(リリースでnegative)
R2ボタン
(リリースでpositive)
右スティック垂直
軸6 右スティック垂直 右スティック垂直 左ボタン(negative)/
右ボタン(positive)
軸7 左ボタン(negative)/
右ボタン(positive)
×ボタン
(リリースでpositive)
上ボタン(positive)/
下ボタン(negative)
軸8 上ボタン(positive)/
下ボタン(negative)
〇ボタン(リリースでpositive)  (無効)
軸9 (無効) 左ボタン(negative)/
右ボタン(positive)
LT(L2)ボタン
(リリースでneutral)
軸10 (無効) 上ボタン(positive)/
下ボタン(negative)
RT(R2)ボタン
(リリースでneutral)
ボタン0 □ボタン △ボタン A(×)ボタン
ボタン1 ×ボタン 〇ボタン B(〇)ボタン
ボタン2 〇ボタン ×ボタン X(□)ボタン
ボタン3 △ボタン □ボタン Y(△)ボタン
ボタン4 L1ボタン L2ボタン LB(L1)ボタン
ボタン5 R1ボタン R2ボタン RB(R1)ボタン
ボタン6 L2ボタン L1ボタン BACK(SELECT)ボタン
ボタン7 R2ボタン R1ボタン STARTボタン
ボタン8 SHAREボタン STARTボタン L3ボタン
ボタン9 OPTIONボタン SELECTボタン R3ボタン
ボタン10 L3ボタン L3ボタン (無効)
ボタン11 R3ボタン R3ボタン (無効)
ボタン12 PSボタン PSボタン (無効)
ボタン13 タッチパッドボタン (無効) (無効)

「ふざけるな……ふざけるなッ! 馬鹿野郎ッ!!」

 軸1と軸2しか共通せんとかどういうことやねん(#^ω^)ビキビキ

ちなみに、PC用ゲームパッドに至ってはボタンに番号振られているにも関わらず、上記の番号と一致しないという有様である(但しXInputモード時)。

ここに至って、Unityがデフォルト設定を投げた理由が分かった。
業界標準などなかった。業界がクソだった。

ごめんなUnity。君は悪ぅなかったワ。

というわけで

入力の実装を検討したというか、ただのゲームパッドの評価で終了してしまったが、ここまで千差万別だと、入力割り当てだけでも一苦労である。

コンシューマ機であれば繋がるゲームパッドの仕様は画一されているだろうから迷うことはないだろうが、何が刺さるかわからんPCゲームでどう対応しているかが気になるところ。

よもやUnity謹製の例の起動画面で割り当てさせてるとか、そんな鬼畜な対応はないよなぁ?

 次回予告

 前回から2週間も空いて、Unityちゃんの姿すら見せることがなかったが、次回こそはUnityちゃんをアーマードコアばりに移動させてみせるゼ!(大口を叩くスタイル)