Unity を Joy-Con で Nintendo Switch 風にしてみた (3)

「Unity を Joy-Con で Nintendo Switch 風にしてみた」の第3回です。

初日と2日目は Switch を据え置き機として使う場合の
「TVモード」の再現に挑戦してみました。

Unity Nintendo Switch Joy-Con TV Mode

本日は、初日に断念した Nintendo Switch の「携帯モード」の再現にリベンジしたいと思います。

昨日作ったアプリを Andoroid 用にビルドして、インストールして、起動します。

Android Unity

早速 JoyCon(ジョイコン)で動かしてみます。

・・・

・・・

動きません・・・

初日と一緒ですね。

先は長くなりそうですが、原因を探っていきます。

まずは、Android 端末と Joy-Con を接続します。

(テスト端末には富士通の「arrows M03」を使用しています)

[設定] > [Wi-Fi・Bluetooth] > [Bluetooth機器の検索]

Android Nintendo Switch Joy-Con Bluetooh Setting 1

基本的な流れは Windows の場合と同じです。

Joy-Con のシンクロボタンを長押しし、プレイヤーランプが点滅し始めるのを確認します。

Android Nintendo Switch Joy-Con Bluetooh Setting 2

検出された Joy-Con (L) を選択するとペアリングが始まります。

しばらく待つと接続状態になりますので、続けて Joy-Con (R) も接続します。

Android Nintendo Switch Joy-Con Bluetooh Setting 3

一度ここまでで Joy-Con の動作確認を行います。

メニュー画面(設定画面)を表示し、ジョイスティック (JoyStick) を操作します。

反応がありません。

信号を拾っていないようです。

とにかく、原因を探ります。

端末の設定項目でブロックしているものはないか、信号を邪魔しているものはないか等々。

はっきりとした原因は特定できませんでしたが、端末を再起動したり、Joy-Con を再接続したり、Android 端末と Joy-Con の距離を適度に保つ(20cmくらい)などしたら、Joy-Con でメニューが操作できるようになりました。

全く解決方法がわからず、端末固有の問題でないかと思ったりもして、いろいろ調べるなどしたため、ここで4時間くらいかかってしまいました。

ようやく問題が一つ解決したので先に進めます。

アプリを起動し、Joy-Con で操作してみます。

・・・

・・・

動きません・・・

まだ駄目な箇所があるようです。

次は、アプリのビルド設定を見直します。

[File] > [Build Settings] でダイアログを開きます。

プラットフォームを「Android」にし、[Player Settings] を選択します。

Inspector にて Andoroid 用のビルド設定ができるのでこれを細かく見ていきます。

Unity Android Joy-Con Build Setting

特段注意すべきところは「Android Gamepad Support Level」の設定でした。

デフォルトでは「Works with D-pad」となっていますが、「Supports Gamepad」または「Requires Gamepad」に変更します。

今回は「Supports Gamepad」にしました。

アプリをリビルドし、Android 端末にインストールし直します。

アプリを起動し、Joy-Con で操作します。

・・・

・・・

動きません・・・

まだか、まだ駄目なのか・・・

初日にも結構調べてるので、終わりの見えない戦いに、はっきりとした疲れが出てきます。

それで、コントローラーをガチャガチャしていたら、
なんとユニティーちゃんがジャンプしました。

Android Joy-Con Unitychan Jump

「う、動いたーーーーー」

ジョイスティックは動かないけれど、ボタンは認識できているようです。

長い道のりでした。

とにかく何かしら動いてしまいさえすれば、ある程度の的を絞ることができ、後は細かい原因を追究していくだけなので、かなり気分が楽になります。

3時間程調べたところ、原因がわかりました。

Axis は Android 端末に接続した場合、
ジョイスティックの左右入力 (Horizontal) が「5th axis」で、
上下入力 (Vertical) が「6th axis」であることが判明しました。

Windows の場合と Android の場合とで信号の番号が異なるということです。

Windows のアプリはそのまま動くようにするため、InputManager に Andoroid 端末用の設定を追加し、プログラムでは「UNITY_ANDROID」という define を使って、入力受付の部分にコンパイルの分岐を作りました。

「これで最後のビルドにしたい」

その一心で気合を込めてビルドしました。

アプリを Android 端末にインストールして起動。

ジョイスティックを倒します。

Android Joy-Con Unitychan Run

「は、走ったーーーーー」

ようやく思ったものができた瞬間でした。

スクリーンショットだけだと、いまいち伝わりにくいので、別カメラでカシャっと。

Unity Nintendo Switch Mobile Mode Android Joy-Con

第三部、完。

関連記事:

 |