たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

Unity で Wii リモコンの入力を受け取る

はじめに

こんにちは、たるこすです。

ここのところ、Wii リモコンを HoloLens のコントローラとして使おうとしています。

前回はセンサーバーの自作方法について紹介しました。

tarukosu.hatenablog.com

今回は Unity で Wii リモコンの入力を受け取る方法についてです。

Wii リモコンと PC を接続する

Wii リモコンは Wii U を買ったときについてきた Wii モーションプラスコントローラを使っています。

以下のサイトの Prerequisites 欄に書かれていますが、2011年11月より前に製造された Wii リモコン は Microsoft 標準の Bluetooth ドライバで接続できるそうです。ですが、それ以降の Wii リモコンはMayflash Wireless Sensor のようなものを使うか、東芝Bluetooth ドライバを使う必要があるようです。

touchmote.net

今回は、東芝Bluetooth ドライバを使うことにしました。そのために、東芝Bluetooth ドライバを採用している Planex の BT-MicroEDR2X を購入しました。 付属の CD にドライバが入っています。

インストールを行い、Bluetooth 設定を開くと、以下のようなウィンドウが表示されます。

Wii リモコンの 1 ボタンと 2 ボタンを同時押しし、ペアリング待ち状態にしたうえで、左下の新しい接続をクリックします。

接続設定はカスタムモードを選択します。

以下のように Bluetooth 機器として見つかったら、それを選択して「次へ」を押します。

あとは「次へ」や「OK」を押していけば接続が完了します。
うまく接続されれば、以下のように緑と黄色の線がつながったようなアイコンが表示されます。

Touchmote のインストール

以下のサイトから、Touchmote をダウンロードします。

touchmote.net

私は 64bit 用のインストーラをダウンロードしました。exe を実行するとインストールされます。

PC と Wii リモコンが Bluetooth 接続された状態で TOUCHMOTE を起動すると、以下のようなウィンドウが表示され Wii リモコンが接続されていることがわかります。

この状態で、センサーバーに向かって Wii リモコンを動かすと丸いカーソルが表示され、A ボタンを押すとスクロール B ボタンを押すとクリックができます。

Wii リモコンの入力を PC への入力に対してどのように割り当てるかは、コンフィグで設定することができます。Settings を開き、「CONTROLLER CONFIG」をクリックすると設定画面が表示されます。

デフォルトでは Default, Mouse pointer, Steering Wheel の 3 つのレイアウトが定義されていますが、既存のレイアウトの設定変更や新しいレイアウトの追加も行えます。

HoloLens 用の入力に使う場合には、Touchmote ではなにも操作してほしくないため、何もしないためのレイアウトを作成します。

以下のようにすべての入力を Disable に紐づけています。また、"Available in Layout Chooser" にチェックを入れておきます。こうすることで、Wii リモコンの HOME ボタンを 3 秒間長押しした際に出てくるレイアウト選択メニューで、作成したレイアウトを選択できるようになります。

Unity で Wii リモコンの入力を受け取る

Unity-Wiimote という Unity で Wii リモコンの入力を受け取れるプロジェクトが公開されています。

github.com

release ページに zip がありますが、ここに含まれている unitypackage はサンプルシーンが入っていないので、リポジトリをクローンして使ってみます。

クローンしたら Unity で開きます。Unity のバージョンは 2017.1.2f1 を利用しました。

Scene という名前のサンプルシーンを開くと、以下のように Wii リモコンと黒い板が表示されました。

実行し、"Find Wiimote" ボタンを押すと Wii リモコンの入力(押されているボタンとポインタ位置)が表示されます。

ただし、Unity Editor で実行する際は、起動する順序にコツがいりました。Touchmote は一旦終了させ、先に Unity を実行して "Find Wiimote" を押します。そのあと Touchmote を起動します。この順序で起動させないと、Wii リモコンのポインタ位置が Unity 側でうまく取得できませんでした。

アプリをビルドして実行した際はこの問題は起きず、Touchmote は起動させたままで大丈夫でした。

実行時は以下のような感じです。緑色の点がポインタの位置、白い2つの点が Wii リモコンから見えているセンサーバーの LED の位置です。

おわりに

次は、当初の目標通り Wii リモコンを HoloLens のコントローラとして使いたいと思います。