CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

UnityでPSMoveを使うときの注意点

以前UnityでPSMoveを使う方法を解説しましたが、ここで使ったAsset"UniMove"には少し癖がありました。ということで、それらの紹介と解決方法を記載します。


以前紹介した記事
【2014/3/9更新】PSMoveをMacで制御する方法とTips紹介 - CrossRoad

1. UniMoveはMacでしか使えない

本家のサイトに記載があります。

FREQUENTLY ASKED QUESTIONS:
1. Is UniMove available for Windows?

It looks as though Thomas finally got the windows problems cracked. However the bluetooth setup on a windows machine is very dodgy and trial and error. But, the good news is that when the connection is established, the controller will connect and work impeccably.

We have added the dll to the package and got it to work, but it is complicated. We will post a guide soon.

引用元:Unimove - Copenhagen Game Collective - an experimental games collective

最後の文章に少し期待させる記述がありますが、2013/11と2014/3に確認したときで変わってなかったと思います。今後に期待ですね。

2. bluetoothペアリングはうまくいっているのに、Unity上でPSMoveが認識されないことがある

原因不明です。本家サイトの開発者に問い合わせましたが、たまに調子が悪くなるとのことでした。

(1)bluetoothのペアリングをやり直す

(2)Unityを再起動する

(3)Macを再起動する

などのどれかを実行すると直ることが多いです。経験則的には大抵は(1),(2)で十分でした。

3. Unityでビルドするとビルドに失敗する(100%発生)

これが一番困りました。Unityサポート->本家開発者の順番に問い合わせて暫定的な解決方法を得たので記載します。
(Unityサポートの方、ご対応ありがとうございました)

症状

Unityでビルドするときは下記のように設定し、"Build"ボタンをクリックするのが通常の方法です。

UnityのBuild実行画面
しかし、ここで"Build"ボタンを押すと、ビルド実行中のプログレッシブバーが出た後、

ビルドが失敗します(.appは作成されません)。

出てくるメッセージは下記です。

Error building Player: IOException: Cannot create Temp/StagingArea/UnityPlayer.app/Contents/Plugins/libpsmoveapi.bundle/libpsmoveapi.bundle because a file with the same name already exists.

原因

UniMoveAsset上で、Plugins/libpsmoveapi.bundle のディレクトリとファイルの区別が付けられていない。

詳しくはわかっておりませんが、UniMoveは"libpsmoveapi.bundle"をディレクトリと認識しているようですが、実際にはファイルであるため何か失敗してしまうようです。

解決方法(たぶん暫定的)

Asset開発者に確認したところ、この問題はたまに発生し、以下の方法で回避しているとのことでした。

1. Finder上からlibpsmoveapi.bundleを移動させる。

"libpsmoveapi.bundle"をAssets/Pluginsディレクトリから除きます。Finder上でファイルを除くと、Unity内のPluginsディレクトリからも"libpsmoveapi.bundle"が消えます。

2.Unity上でビルドする。

"libpsmoveapi.bundle"不在ですが、なぜかビルドはできます。この辺の原理は不明です。

3.作成したxxx.app(私の場合はUnboundedSpace.app)を右クリックし、「パッケージの内容を表示う」を選択
4. Contents/Pluginsディレクトリに、"libpsmoveapi.bundle"を追加する。

これでxxx.appを起動すると、アプリケーションでもPSMoveが使えます。ただし、アプリケーション上でもPSMoveが認識されるときと、されないときがあります。

また、アプリケーションかUnityのどちらかでしかPSMoveを認識しないようにも見えます。
(利用先切り替え時には、PSMoveのペアリングをやり直すとうまくいきました)

4. 終わりに

以上のように、UniMoveでPSMoveを使うのはちょっと癖があります。ただ、先週Sonyが発表したProject Morpheusでは、新しいHMDでPSMoveをコントローラにする予定と言われていたので、もう少し検討できるといいなと思ってます。