工学ナビではこれまでもアニメやゲームにインスパイアされて、その世界観を楽しめるものをいろいろ作ってきました。 攻殻機動隊、かまいたちの夜、メタルギアソリッド、電脳コイル(本家BDの特典も制作しました)、ウォッチドッグスなどなど。 そして今回はついにスプラトゥーンです! スプラトゥーンと言えば、水鉄砲シューティングなので、やっぱりそれっぽいガン型のコントローラ(ガンコン)でプレイしてみたいですよね。 それと、最近またバーチャルリアリティのブームがやってきてるので、ヘッドマウントディスプレイ(HMD)をかぶってその世界に没入できるようなものがいいかなと思い、そういうスタイルのものに挑戦しました。 今回は結構気合いの入ったハードウェア制作を行っています。それではご覧ください!
|
プロトタイプ1号 − GamePadをHMDに搭載してヘッドトラッキング
プロトタイプ1号 (制作:2016/03/29)
HMDで首振りに対応したい!
スプラトゥーン用のオリジナルインタフェースを作るにあたり、HMDをかぶって首を振ったらその方向が見れたらいいなぁと考えました。 スプラトゥーンはTPS(Third Person Shooter:三人称視点シューティング)なので、HMDをつないだからといって主観体験になるわけではないのですが、 試しにHMDを装着して頭のうえにGamePadをかざしてプレイしてみたところ、「HMDで三人称視点も意外にイケるな」という感覚がありました。 制作に入る前にこういうQuick Hackをやるのは大事ですね。
ご存じの通り、スプラトゥーンでは視点操作をGamePadに内蔵されたジャイロを使って操作するか、右スティックで操作するかを選べます。 右スティックよりもジャイロのほうが機敏に視点を動かせることがわかったので、首振りに同期させるならジャイロを使おうと思いました。
当初のアイデアでは、GamePadに内蔵されているジャイロセンサをコードで延長してHMDに取り付けたり、ジャイロセンサ内蔵HMDの角度信号をGamePadに入力すればいいかな、と考えていたのですが、 GamePadを分解してみたところ、非常に小さなジャイロセンサが回路基板上にビルトインされているではありませんか。 これを直接いじるのは得策ではないと思い、プレ実験でやったのと同様、GamePadを頭(HMD)に取り付けるという方法を採用しました。
HMD(Sony HDZ-T1)に金具を使ってGamePadを固定。固定の都合で外装は新しく作成。
ガン型のコントローラはマルイのP90TRという電動ガンをベースにしました。この時点では「撃った時に振動が欲しい」「P90TRカッコイイ」ぐらいのことしか考えていませんでした。 トリガーを引いた時にゲーム内でショットが撃てるようにするギミックについては、銃を分解して中にスイッチを組み込むのが面倒だったので、 銃口に圧電センサを付けて、空気振動を検出するようにしました(いま考えると、かえって面倒な気も)。撃った時にガガガッと振動するのはやっぱり楽しいです。
HMDと電動ガンと制御回路。電動ガンには3つのボタン(前後移動・イカ)を取り付けました。
プロトタイプ1号で実際にプレイ
プロトタイプ1号で実際にプレイしている様子。首振りと連動はしたものの...
プレ実験の時点でわかっていたことですが、三人称視点のコンテンツをHMDでプレイするのはなかなか楽しいです。 首振りと連動することによって、ちょうどその世界に観客として没入しているようなイメージになります。没入型三人称視点と呼んでもいいかもしれません。 昨今のVRブームにおいて主観視点のVRコンテンツが大多数を占める中で、三人称視点のVRコンテンツを制作している人もときどき見かけますが、 この方向性は面白いのでもっと掘り下げるべきでしょう。
首振りと連動して視点の向きが変わる、という点については良かったのですが、別な問題がありました。
スプラトゥーンでは一般的なTPS・FPSのゲームと同様、銃口の向きは視点操作と連動しています。
このため銃口の向きを変えたければ首を振る必要があるのですが、実際に人にガンコンを持たせてプレイさせてみると、人は無意識にガンコンを振ることによって銃口の向きを変えようとしてしまいます。
銃の形をしているのでごく自然なことなのですが、銃を振っているのに射線の方向が変わらないので違和感を生じます。
ああ、これは銃の方にGamePad(ジャイロ)を取り付けないといけないなと考えて2号を作ることになるのですが、その考えにはある「落とし穴」が潜んでいることに僕はまだ気付いていませんでした。
ボタンとタッチスクリーンのHack
ボタンやスティックの電気的仕様についてはまずネットで情報を探し、わからない部分についてはテスタを片手に調べました。 ロジックの電源は2.7V付近で動いており、各ボタンは一般的なコントローラと同様、負論理で動いていました(つまり端子の電位をGNDに落とすとボタンがONになる)。 これがわかっていると、Arduinoなどのマイコンを使ってボタン操作を自動化できるようになります。 調子に乗って、PC経由でGamePadを操作して遊んでいる様子が以下の写真です。
「まさか俺たちがキーボードでプレイしていると思わないだろうな」
「これを応用すると、スプラトゥーンAIが作れるね」
GamePadに表示されている映像は「偽トロキャプチャ」というデバイスを組み込むことで、PCでリアルタイムキャプチャできるようになります。 スプラトゥーンではマップ映像が表示されるので、それを戦闘機のヘッドアップディスプレイ(HUD)のようにHMD上に表示するのも面白そうだなと考えています。 実は1年前にも同種のHackをやっていて、そのときはマップ映像を画像処理して敵味方の色を自動検出し、ナワバリの進行度をリアルタイムに解析するツールを作っていました。
スプラトゥーン自動解析ツール「Kraken」(試作)
タッチスクリーンには抵抗膜方式(4線式)のものが使われており、これ自体の仕組みは単純なのですが、本体基板に対して擬似的にタッチ入力信号を入れる方法がわからず、 悩んだ果てに可変抵抗をサーボモータで回して抵抗値の変化を再現するというアホな実装で制御を実現しました(※適切な方法を知っている方がいらっしゃいましたら、ぜひ教えてほしいです)。 この仕組みを使ってPC経由でマリオメーカーを操作している様子が以下の動画です。
これもまた悪魔的なことができそうな予感がしますね。
プロトタイプ2号 − 電動ガンにGamePadを搭載してエイミング
プロトタイプ2号 (制作:2016/05/2)
ガンコンと連動して銃口(視点)の向きが変わるようにしよう!
プロトタイプ1号の反省から、今度は電動ガンのほうにGamePadを取り付けようと考えました。ついでにGamePadの外装も新しくべニア板で作りなおしました。 木の風合いはゲームコントローラっぽくなくてこれはこれで面白いですね。 電動ガンにはスコープなどのオプションパーツを取り付けるためのマウントレールと呼ばれる部位があるのですが、ここにうまく固定できるようにパーツを作りました。
ガンコンで全部完結するようになったので、ケーブルがなくなってスッキリしました。
プロトタイプ2号で実際にプレイ
プロトタイプ2号で実際にプレイしている様子。凄くいい反応をしていますが、ヤラセではありません。
完成して「さぁやるぞ!」と意気揚々と使ってみたら、思わぬミスに気付きました。 電動ガンが振動することによってジャイロが狂ってしまい、視点がズレてしまうのです。 「なんでこんな単純なことに気付かんかったんや...」やらかしました。せっかく電動ガンを使っているのに、振動なしでのプレイになってしまいました。
振動がないのは少し残念ですが、ガンコン側にGamePadを搭載したことで、1号よりもエイミングがうまくできるようになりました。 ちなみに、振動がなしになったので圧電センサでショット検知するのはやめて、素直にトリガーの部分にスイッチを内蔵することにしました。 これで一旦は完成ということにしていたんですが、遊んでるうちに「もうちょっとそれっぽいものにしたい」と思うようになり、開発は再開することになります。
プロトタイプ3号 − 水鉄砲型UI + GamePadを背負って身体方向をトラッキング
プロトタイプ3号 (制作:2016/6/19)
一見すると普通の水鉄砲とゲームパッドに見えますが...?
やっぱり振動させたい!
3号を作るにあたり、まず考えたのは振動ユニットを入れることでした。やはりガンコンにするからには「ダダダッ」という振動が欲しいです。 2号でやらかした通り、ジャイロと振動ユニットが同居しているとジャイロのセンシングが狂います。 はて、どうしたものか?と議論した結果、出てきたアイデアは「GamePadを背中に取り付けてはどうか?」というものでした。 なるほど、これなら振動の影響は受けないし、銃を持つ手の向きは肩の向きで近似できそうです。名案です。 制作に入る前に、実際に背中にGamePadをあてながらプレイしてみたところ、イケそうだったので採用となりました。
振動ユニットには電動ガンのELEX9を分解して使うことにしました。 この製品はメカボックスの部分がすんなり取り出せるので、この手のHackにうってつけです。 振動ユニット単体では結構うるさいんですが、適当なクッション材で挟んでみたらちょうどいい音を出すようになりました。
材料。これは材料です。
やっぱり水鉄砲にしたい!
振動ユニット以外にも大事なこだわりがありました。それはガンコンの形をスプラトゥーンらしい外観にすることです。 当初、3Dプリンタでスプラシューターを作ってしまうことも検討したのですが、モデリングと出力に時間がかかって面倒だなと思い、本物の水鉄砲を使うことにしました。 Amazonやドンキホーテでそれっぽい水鉄砲を探してる間、終始「スプラトゥーンっぽい!」などと言っていましたが、もともと水鉄砲がモチーフなのだから当たり前です。
スプラシューター感がありますね。実は2種類の水鉄砲を組み合わせて作っています。
振動ユニットや電池、制御回路も含めて全部がきれいに収まりました。
水鉄砲には7個のボタンが付いていて、前後移動・イカ・視点リセット・ジャンプ・サブウェポン・スペシャルウェポンの操作ができます。 もちろんトリガーを引けばショットが撃てます。 今回もタッチスクリーン操作のスーパージャンプとトルネードはできませんが、前述の通りタッチスクリーンのHackはできているので、気が向いたら対応します。
やっぱりコードレスにしたい!
ガンコンとGamePadを再度分離するにあたり、ひとつ問題がありました。コードです。 プロトタイプ1号では、ボタンスイッチからGamePadまでの経路を有線で延長していたのですが、ちょっと鬱陶しいと感じていました。 しかも今回、1号ではできていなかったジャンプやサブウェポンなどの操作ボタンも追加しようと考えていたので、いよいよコードの本数が多くなって取り回しが厄介になることが予想されました。そこで、思い切ってガンコンとGamePadの間を無線化しました。
具体的にはXBeeという無線モジュールを使って、ボタン入力の情報をやり取りする仕組みにしました。 もともと無線接続のGamePadからさらに無線で通信路を作るのはちょっとアホなんですが、目立った遅延はなく動作しています。
GamePadへの入力を無線化する実験。最初はこんな風にブレッドボードでやります。
青い基板がガンコン側との無線通信回路。改造されていますが、普通のGamePadとしても機能するようになっています。
プロトタイプ3号で実際にプレイ
プロトタイプ3号で実際にプレイしている様子。ナワバリバトルをノーカットでご覧ください。
完成後、ドキドキしながらGamePadを背中にかつぎ、水鉄砲型コントローラを手にして動かしてみると......やった!うまくいきました! 身体の向きを銃(視点)の向きとする方法でおおむねうまく操作できています。 なにより、トリガーを引くのに合わせて振動が出るのが楽しいです! やっぱりガンコンはこうでなくっちゃ! また、水鉄砲型インタフェースにしたことによって大きな反響がありました。 こういうネタにおいてそれっぽい外見はすごく大事ですね。
おわりに
現在の最終版はプロトタイプ3号です。まだやり残していることがいくつかあるので、気が向いてアップデートしたらまたご報告します。 いろいろ試してみましたが、それっぽいインタフェースを作るのはやっぱり楽しくてテンションが上がりますね! ちなみに、僕はこのインタフェースでプレイするよりも、普通のGamePadでプレイする方が戦績は上でした(笑)