読者です 読者をやめる 読者になる 読者になる

Oculus用操作デバイスの検討(PSMove)

Oculus Rift Unity PlayStationMove

次のOcufesに間に合うかわかりませんが、次回はFPSでの戦闘ゲームを作りたいと思ってます。

スパイダーマンもどきで作ったフックショットの移動方法をもう少し活用してみたくなった、というのもあります。


そうすると、さすがにキーボードとマウスでは限界があるので、そろそろ操作デバイスを試そうと思い、PlayStation Move(PSMove)とUnityを連携してみました。

動作確認条件

  • Mac(MountainLion)
  • Unity4.2.1f4

[2014/3/9追記]
Mac(Marvericks)とUnity(4.3.4f1)でも動きました。

PSMoveとUnityの連携方法

1. macとPSmoveの接続

1-1. Bluetooth接続用のプログラムを入手

macbluetooth接続設定では、デバイス名が表示されませんでした。
そこで、下記より入手したライブラリの一部を使います。

 http://thp.io/2010/psmove/

1-2. PSMoveをUSBでMBAと接続し、psmovepairプログラムを実行
  # ./psmoveapi_3.0.0/bin/psmovepair


1-3. Xボタンを押せ、などいくつかの指示が出るため、指示通りに操作
->PSMoveがペアリング成功となる。

[1の補足]
・ペアリング成功後はUSBを外してもOK
・PSMoveはPCとのUSB接続であれば充電を継続しているように見える。スマホ用のACアダプタでは充電できなかった
・通常のペアリング設定と異なり、PCの再起動毎にこのプログラムによるペアリング設定が必要


2. PSMoveをUnityと連携

2-1. 下記よりUnimoveを入手

http://www.copenhagengamecollective.org/projects/unimove/


2-2. 入手したUnityPackageをダブルクリック(Unity上でImportでも可)

HPの説明では、ここに入っているSceneを選択すれば何かが体験できるようですが、Sceneを開いても何も入っていませんでした。

2-3. PSMoveの簡易動作確認を実施

適当に空のオブジェクトを作ってから、先ほど入手したUniMoveTest.csをドラッグします。

この状態でRunすると、PSmoveとUnityプロジェクトが連携し、ボタンを押すとLEDが変わることが確認できました。

f:id:Takyu:20130929125319j:plain

別のボタンを押せばこのように別の色になります。

f:id:Takyu:20130929125305j:plain


(写真なので、実際とはちょっと色が異なってます)


色については、実際に変わるかは未確認ですがRGBを細かく指定できるようです。

RGBの指定はUniMoveController.csにありました。

//UniMoveController.csの一部
/// <summary>
/// Sets the LED color
/// </summary>
/// <param name="r">Red value of the LED color (0-255)</param>
/// <param name="g">Green value of the LED color (0-255)</param>
/// <param name="b">Blue value of the LED color (0-255)</param>
    public void SetLED(byte r, byte g, byte b)
    {
		if (disconnected) return;
		
		psmove_set_leds(handle, (char)r, (char)g, (char)b);
    }

また、psmove_set_ledsは、

	[DllImport("libpsmoveapi")]
	private static extern void psmove_set_leds(IntPtr move, char r, char g, char b);

とあるので、ライブラリ関数ですね。


また、バイブレーションも使えました。

これは思った以上に色々使えそうな気配です。

魔法とか、ガンアクションとか、夢が膨らんできますね(^-^)


2013/11/2 追記
PSMoveのペアリングについて、別の日に試すと(Macをスリープした後)Unityでうまく認識しないことがありました。
元の記事を見たときは、Mac再起動時に再設定が必要とあったのですが、他の場合でも再設定しなければならないようです。

[症状]
● # ./psmoveapi_3.0.0/bin/psmovepair を実行すると、エラーメッセージは出ない
MacでもPSMoveがBluetoothデバイス一覧に表示されている。
●しかしUnity上のプロジェクトから実行すると認識しない

[解決方法]
1. Unityが開いていたら閉じる
2. システム環境設定->BluetoothからMothin Controllerのデバイス情報を削除する
3. # ./psmoveapi_3.0.0/bin/psmovepair を実行する
4. Unityを起動

これで今度はPSMoveがUnityでも認識するようになりました。

広告を非表示にする