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

PSmoveでゲームを作る(1)

Unity Oculus Rift PlayStationMove

今回作りたいゲームはガンシューティングに近いものなので、銃型デバイスとしてPSMoveに注目しています。


まだ途中ですが、メモも兼ねて途中経過を書いておこうと思います。まずは一番重要なPSMoveの動きに合わせて照準を動かすところを作ってます。

PSMoveの動きに合わせてオブジェクトを動かす

1. Unimoveのパッケージをimportし、Code/UnimoveTest.csを開く

Unimoveのパッケージ入手先
http://www.copenhagengamecollective.org/projects/unimove/

2. UnimoveTest.csにFixedUpdate()を追加し、以下を宣言

private Vector3 rawAccelTargetMarker = Vector3.down;

3.FixedUpdate()に以下を入力

   foreach (UniMoveController move in moves) {
      if (Input.GetMouseButton(0)) {
         rawAccelTargetMarker = new Vector3(moves[0].Acceleration.x,moves[0].Acceleration.y,0);
	this.gameObject.transform.position = rawAccelTargetMarker*Time.fixedTime;
      }
   }

このスクリプトSphereとか、適当なオブジェクトにアタッチしてから実行すると、マウスを左クリックしているときのPSMoveの動きによってオブジェクトが動きます。Sceneビューをxy軸表示にするとわかりやすいです。

ただ、現状はx軸の動きがいまいちですね。また、ぶれがあって常に動いてしまいます。

PSMoveを水平にすれば多少はましになりますが。


なんとなくここまで来て、実は加速度センサよりジャイロセンサを使った方がよいような気がしてきました。

あとは取得する値がfloatなのでもっと粗めに取るとかかな。

もう少し検討を続けてみます。


ところで、LeapMotionなどの他のデバイスとは異なり、UnimoveのAPIにはPosition検出がありません。

理由は、本来PSMoveの位置検出はPSEyeのカメラと組み合わせて取得しているからだと思います。

実はPSEyeも利用できて、Position検出できるソフトウェアをソニーが提供しています。でも以下の理由があって導入はやめました。

1. PS3とネットワーク接続が必要
2. $99かかる(2011年情報)

PS3がなくても動かせそうな気がするのですが、、 

広告を非表示にする