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

PSMoveでゲームを作る(3)

今度はOculusをかぶったときの視線中心から弾を発射させます。以下の処理を追加します。

弾の生成
//OVRPlayerController.csまたはPSMoveTest.cs (OVRPlayerControllerにアタッチするスクリプトならばなんでもよい

public GameObject bulletObject;

void Update(){
   ・・・
      if(Input.GetKeyDown(KeyCode.Z)){
	  Instantiate(this.bulletObject, this.transform.position,Quaternion.identity);	
      }
 ・・・
}

このスクリプトを、Hierarchy ViewのOVRPlayerControllerなどにアタッチし、Inspector ViewのBullet Objectに弾のPrefabをアタッチします。

ここでは、弾のPrefabとして、cube ObjectをPrefab化したものを使いました。
cube ObjectにはRigidBodyを取り付け、Use Gravityのチェックは外しておきます。

弾の動き

次にcube Objectにアタッチするスクリプトです。

//bullet.cs

//弾が飛ぶ方向の指定に必要
    private Camera leftCamera;
	private Vector3 destinationPosition;
	private Vector3 distance=Vector3.zero;
	private Vector3 targetMarkerPosition;

//今のOculusで視線中心になるように調整した値。
	private int targetMarkerPositionX = (int) (Screen.width * 0.273);
	private int targetMarkerPositionY = (int)(Screen.height * 0.575);

//生成時に一度だけ呼ばれる。ここでOculus Riftのカメラ方向(装着者の視線方向)からcube Objectを発射。
void Start () {
	leftCamera = GameObject.Find ("OVRPlayerController/OVRCameraController/CameraLeft").GetComponentInChildren<Camera>();
	targetMarkerPosition = new Vector3(targetMarkerPositionX,targetMarkerPositionY,0);
	shootBullet();
	
}


public void shootBullet(){
	Ray ray;
	RaycastHit rayCastHit;
	ray = leftCamera.ScreenPointToRay(targetMarkerPosition);  /rayを飛ばす開始点を決定
	if(Physics.Raycast(ray, out rayCastHit, 10000)){  // 距離10000までの範囲にobjectがあればif文は真
		destinationPosition = new Vector3(rayCastHit.point.x,rayCastHit.point.y,rayCastHit.point.z); //rayで見つけたobjectの位置を決定
		distance = Vector3.Normalize(destinationPosition - transform.position);	//現在位置とオブジェクトの位置までの方向を算出
	}
   this.rigidbody.velocity = new Vector3(distance.x,distance.y,distance.z)*50;  //指定方向に向かって等速度を付加
}

//画面外に消えたcube Objectを破棄.これがないといつかメモリを食いつぶします。
void OnBecameInvisible(){
	Destroy(this.gameObject);
}


これらを実装してから実行すると、キーボードのZボタンを押すたびにcube Objectが前方に向かって発射します。

f:id:Takyu:20131108205311p:plain

Scene Viewの英文はPSMoveが接続されてないときに表示させてるメッセージで、今回とは無関係です。


f:id:Takyu:20131108205358p:plain

Zキーを押して弾を飛ばします。照準がずれてますがOculusで見ると立体視で中心に見えます。


ところで最近ダンガンロンパにはまっており、今回のガンシューティングゲームの動機だったりもします。

なので、ダンガンロンパをヒントにして、クイズとガンシューティングの融合を考えています。

例えばこんな感じで、雑音に向かって弾(コトダマ)を飛ばすと、

f:id:Takyu:20131108205813p:plain

コトダマがノイズを打ち砕き、

f:id:Takyu:20131108210005p:plain

どこかに飛んでいくようなイメージです。

f:id:Takyu:20131108210057p:plain


とりあえず最低限の原理試作はできたので、後は時間見て作っていくつもりです。

開催時期未定ですが、次回のOcufesで出せたらいいなと思ってます。

広告を非表示にする