Unity不定期便

Unityエンジンを使って、いろいろ勉強したことをメモ代わりにまとめてます。

製作6時間!Unityで撃ちまくり系ミニゲームver2を作ったので手順を公開!

f:id:masatolan:20131125122103j:plain

どうもです!

前回に引き続き、撃ちまくり系ミニゲームを作ってみました。

今回は、ゾンビではなく人間を用意して、マウスで直接撃つタイプに変更してます。いつものように、忘れないための手順を明記しておきます。

 

素材の用意!

イメージとして、戦場系のガンシューティングにしたかったので、いろいろAssetStoreを見ていると良い感じの3Dモデルを発見!

f:id:masatolan:20131125122813j:plain

 

戦場野郎まで配布されているではないですか〜!

f:id:masatolan:20131125122958j:plain

 

女性キャラもゲット!

f:id:masatolan:20131125122831j:plain

 

床を砂漠風にしたかったので、こちらを利用!

f:id:masatolan:20131125122839j:plain

やっぱり、AssetStoreは便利ですね〜。ちなみに、全部無料で提供されてます。

 

舞台を作る!

早速、舞台を作ってみます。

床はPlaneを使って、その上にオブジェクトを置いてます。あと、周りに玉やキャラクターを削除するためのゾーンも作っております。

f:id:masatolan:20131125123745j:plain

①出現したキャラクターが、カメラ外に行った時に消すゾーン。

②何があるか分からないのでPlane外に落ちたオブジェクトを消すゾーン。

③遠くに飛ばした玉を消すゾーン

…という感じです。

 

玉を撃つ!

今回は、マウスで直接クリックして玉を発射するようにしてみました。

公式リファレンスをいろいろ調べた結果、メインカメラに「Rayを使って座標を取得するスクリプト」が簡単そうだったので利用してみました。

function Update () {

if ( gameover ) {

    if ( Input.GetMouseButtonDown ( 0 ) ) {
	
		var ray : Ray = Camera.main.ScreenPointToRay ( Input.mousePosition );
		var dir : Vector3 = ray.direction.normalized;
		var bullet = GameObject.Instantiate ( tama, transform.position, transform.rotation );
		bullet.rigidbody.velocity = dir * power;
		audio.PlayOneShot ( shot );
		
	}

}

マウスをクリックしたら、Rayを使ってその方向に見えない光線のようなものが出るみたいです。

その方角をdirに放り込んで、power変数分だけ玉を飛ばすという感じです。ついでに、発射音もつけてます…。(もっと良い方法があれば、どなたか…ぜひ教えてくださいませ)

 

敵を出現させる!

今回、最も時間が掛かった部分でございます。

いろいろ考えたのですが、敵を出現させるBoxを建物の影に設置するのが簡単そうだったのでやってみました。

f:id:masatolan:20131125125021j:plain

ちょっと見にくいかもしれないですが、小さなCubeを設置しています。

 

このCubeに、敵と女性を出現させるためのスクリプトを貼るようにしました。

function Update () {
    
if ( gun.gameover ) {

	timer -= Time.deltaTime;
	if ( timer < interval ) {

		if ( selector < charainterval ) {
		
			var bullet = GameObject.Instantiate ( enemy, transform.position, transform.rotation ) as GameObject;
		
		} else if ( selector > charainterval ) {
			
			var bullet2 = GameObject.Instantiate ( enemy2, transform.position, transform.rotation ) as GameObject;
			
		}
		timer = 1;
		interval = Random.Range ( -2, -10 );
		selector = Random.Range ( 0, 50 );
		
	}
	
}

}

スクリプトに関して、かなり参考にさせて頂いたブログがこちら!

Unity3Dで2Dのシューティングゲームを作ってみるチュートリアルその4 - Lonely Mobiler

Time.deltaTimeが便利だということが、新たな発見でした。

interval変数に、乱数を代入することで敵の出現間隔を小刻みに変えてます。

また、selector変数にも乱数を代入して、敵と女性キャラの出現頻度を調整しております。charaintervalは、現在35に設定してます。(敵の方を出現しやすくしてます)

 

ちなみに、出現させたキャラクターは、別途キャラクター側にMecanimを使って動かすスクリプトを貼ってます。詳しくは、以下をご参考にどうぞ!

Unity4の「Mecanim」で手っ取り早く3Dモデルを動かしてみたら感動した! - Unity不定期便

苦節4時間。Unityでゾンビ撃退ミニゲームを作ってみたので手順を公開! - Unity不定期便

 

当たり判定を付ける!

当たり判定に関しては、前回のゾンビゲームと同じ処理です。

玉の方に、衝突判定のスクリプトを貼り付けてます。

f:id:masatolan:20131125145240j:plain

 

 

ただし、今回は敵と女性で、それぞれの処理が変わるのでタグを2つ用意しました。

function OnTriggerEnter ( col : Collider ) {

    if ( col.tag == "Enemy" ) {
	
		GameObject.DestroyObject ( col.gameObject );
		var bullet = GameObject.Instantiate ( bomb, transform.position, transform.rotation ) as GameObject;
		score.score -= 1;
		Destroy ( bullet, 0.5 );
		
	} else if ( col.tag == "Player" ) {
	
		gun.gameover = false;
		
	}
	GameObject.DestroyObject ( gameObject );
	
}

女性キャラに玉がヒットした時点で、すぐにゲームが終了するようにしてます。

本当は、ライフポイントなどを設定しようかと思ったのですが、短いゲームにしたかったのでやめました…。

 あとは、敵を消した時にParticleでエフェクト付けてます。

 

スコアとタイム表示!

最初は、敵にヒットしたらポイントを得られるような定番のスタイルにしようかと思ったのですが、「あと◯人倒したらクリア!」という表示の方が面白いかなぁ〜と思い、実験的にトライ。

GUITextを配置して、以下のシンプルなスクリプトを貼り付けてます。 

function Update () {

    guiText.text = "あと" + score.ToString() + "人倒せ! ";
	if ( score == 0 ) {
	
		gun.clear = false;
		gun.gameover = false;
		
	}
	
}

無事にクリアしたら「CLEAR!」の表示、それ以外は「GAMEOVER」の表示にするために、スイッチを2つ作ってます。

あと、カウントダウン用にもう1つGUITextを配置して、以下のスクリプトを設置。

function Update () {

 if ( gun.gameover ) {

     time -= Time.deltaTime;
   now = time;
	 guiText.text = "TIME:" + now.ToString();

	 if ( time < 0 ) {
	
		gun.gameover = false;
		
	 }

 }

}

カウントが0になったら、ゲーム終了になるようにしてます。

 

音を付ける!

ゲームのBGMは、以下の素材をAssetStoreからゲットしました。

f:id:masatolan:20131125151633j:plain

無料の割には、クオリティが高いと思います。

 

玉の発射音は、こちら!

f:id:masatolan:20131117174558j:plain

銃撃モノゲームには欠かせない素材ばかり。

 

完成!

そんなわけで、ゲームは完成です!

f:id:masatolan:20131125122103j:plain

【ゲームはコチラから遊べます!(PC環境推奨)】

 

やはり、マウスで撃つと、なんかリアル感が増しますね…。

 

さて、次回は何を作ろうか思案中…。

 

★撃ちまくり系Ver1の記事はこちら!

苦節4時間。Unityでゾンビ撃退ミニゲームを作ってみたので手順を公開! - Unity不定期便

 

撃ちまくりミニゲームを作るうえで役立った書籍
Unity4入門   最新開発環境による簡単3Dゲーム製作

Unity4入門 最新開発環境による簡単3Dゲーム製作