はかせのラボ

私の頭の中を書いていく雑記ブログです

TGS2018出展の話

久しぶりの投稿です。
最近は忙しくて記事を書く余裕がありませんでした。
理由はタイトルの通りです。

今年のTGSの学生ブースに「ABSOLUTE SPEED」というVRを使用した体感型レースゲームをチームで開発して出展しました。

このゲームの特徴はまずVRを使ったレースゲームであるということです。
私が知る限りではグランツーリスモぐらいしかないので結構珍しい部類に入るのではないかなと思っています。

次に体感を強化するために行った工夫です。
自分たちは走っているという感覚を強化するために
・ボディソニック(音に対応して揺れるやつ)
・ハンドルコントローラーとドライビングシート
・サーキュレーター
これらの機材をゲームと連動させて動かしました。
そうすることで視覚と聴覚だけでなく触覚も刺激しよりリアルな体験ができると考えたからです。

私は主にゲームとサーキュレーターの連動を担当しました。

やっていることは単純で赤外線リモコンアドバンスという赤外線を記録しPC側で送受信が行える機材を使用しPC側から赤外線操作可能なサーキュレーターをリモコンで操作しているという形になります。

またこの機材には操作するためのアプリが存在しており操作すること自体はそこまで問題にはなりませんでした。
(以下リモコン操作アプリ)

ですが、Unityで作ったゲームと連動させるのは意外と難しいものでした。
私は最初アプリをゲームの中に入れてc#のProcessクラスの命令を使用し操作しようとしました。実行結果は失敗でした。
デバッグしてみたところProcessクラスの一部の命令が実行されていなかったのです。

原因を探りましたがUnityではない通常のウィンドウアプリケーションやコンソールアプリケーションで実行した場合は
普通に動作していたのでUnityに内部的に止められているという結論を出しました。

本来であれば公開されているUnityのソースコードから
原因を探り解決するべきだと思いますが、
今回は時間があまりなかったこととその中でやらなければならないことが多かったため別の方法でこの問題を解決しました。

その解決法は以下の通りです。
①リモコン操作アプリ自体はUnityとは関係なく独立させて実行
②Unityとそのアプリをつなぐアプリを開発
③開発したアプリをDLLでUnityに組み込みバックグラウンドで実行
④開発したアプリ経由でリモコン操作アプリを操作

↓即興で作ったイメージ図
f:id:hakase0274:20180922143417p:plain

こうすることでUnityでは実行できない命令を使えるようにし
サーキュレーターとゲームを連動させ、
車の速度によって風量を調節することに成功しました。

私が関わった部分は他にもありますが長くなりすぎるのでこの辺で終わりたいと思います。

最後に今年のTGS、投稿するときにはもうあまり時間はないかもですが
行ったときは「ABSOLUTE SPEED」是非プレイしてください。