Unity不定期便

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

2時間かけて、Unity4のMecanimを利用した「走る系」ゲーム作ったので手順を紹介します!

f:id:masatolan:20131120105205j:plain 

どうもです!

すっかりUnityエンジンが病みつきになってます…。

 

今回は、AssetStoreをブラブラ見ていたら、無料のちょうど良い感じの3Dモデルを発見したので、どうしても走らせたくなり…くだらないゲームをまた作ってしまいましたのでご紹介です。ちなみに…製作時間2時間くらいなので、それ相応のクオリティです。

(自分用に、手順を忘れないためのメモ代わりでもあります…)

 

まずは素材集めから!

AssetStoreで発見したのが、こちらのモデル!

f:id:masatolan:20131119104424j:plain

このクオリティで無料なのがスゴイ。思わず、走らせたくなりました…。

(Mecanimスターターキットも一緒に入手済み)

 

あとは、走らせる道路に貼り付けるテクスチャも、ついでにゲットします。

f:id:masatolan:20131120112348j:plain

とりあえず、これだけあればOKです。

 

3Dモデルを動けるようにする!

先ほどゲットした3Dモデルを、自由に動けるようにする手順を以下に解説しているので、まずは一読くださいませ。

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

 

ここに書いている手順通りに進めると、PCのキーボードから自由自在に動かすことができるようになります。

f:id:masatolan:20131119110401j:plain 

Mecanimの機能を使っているので、とてもリアルな動きをしてくれます。(ちなみに、コーディング無しで出来ます)

 

道路に仕掛けを作る!

キャラクターが、単純に道路を走るだけだとちょっとつまらないかなぁ〜と思ったので、コース途中に動く道路を作りました。

f:id:masatolan:20131120113249j:plain

この白い道路が左右にゆっくり動くアニメーションをします。

Unity搭載の「Animation」を使って動かしています。こちらも、以下に詳しく手順を解説しましたので、使い方をご存知無い方は御覧ください。 

Unity4の「Animation」でオブジェクトをプログラミング無しで動かしてみる! - Unity不定期便

 

コースを作る!

今回、キャラクターに走らせるコースの全体図がこちら!

f:id:masatolan:20131120114517j:plain

かなりザックリなコースですが、全長200mくらいは走るようになってます。

 

一応、小さな仕掛けも散りばめました。

f:id:masatolan:20131120114650j:plain

 

障害物、スロープ、壁、動く道路など…があります。

とりあえずこんなもんで良いでしょう…。

これらはすべて、Cubeから生成してひたすらオブジェクトを置いていきました。もっと効率的な方法があるかと思いますが…。

 

ゲームのルールを作る!

まずは、コースから落ちたらゲームオーバーになるという要素を仕込みます。

そのため、コースの真下にCubeで作った巨大な床を配置します。

f:id:masatolan:20131120120045j:plain

 

 

ちなみに、Cubeのインスペクター画面から「MeshRenderer」の項目を削除して透明にしてから、「BoxCollider」のIs Triggerにチェックを入れてます。

f:id:masatolan:20131120121302j:plain

これで、キャラクターがコースから落ちて巨大な床に接触したら、「BoxCollider」にキャラクター情報が入るはず!

 

そして、スクリプトを追加します。

function OnTriggerEnter ( col : Collider ) {

    GameObject.DestroyObject ( col.gameObject );
	goal.gameover = true;
	
}

「OnTriggerEnter」で、「何かが接触したら…」という命令になるので、今回のゲームで言えばキャラクターが落ちたら…ということになります。

あとは、キャラクターを削除してゲームオーバー処理をするためのスイッチをtrueにしてます。

 

trueになると、以下の処理を実行させて画面に「ゲームオーバー」の表示と、もう一回やるか?のボタンを表示させます。

function OnGUI() {

    if ( gameover ) {
		GUI.Label ( Rect ( Screen.width / 2 -150, 250, 200, 30 ), "GAME OVER", style );
		if ( GUI.Button ( Rect ( Screen.width / 2 -120, 200, 200, 30 ), "Retry?" ) ) {
			Application.LoadLevel ( Application.loadedLevel );
		}
	}
	
}

 

ちなみに、上記のスクリプトだけはゴールした時に反応させるオブジェクトに仕込んでます。

f:id:masatolan:20131120122658j:plain

gameoverのスイッチをstatic指定にしておけば、ゴールした時とコースから落ちた時のゲームオーバー処理を同じに出来るので効率的かと。

 

あとは、画面にタイムを表示してます。

var time : float;
var now : int;

function Update () {

	if ( goal.gameover == false ) {	
		time += Time.deltaTime;
	}
	now = time;
	guiText.text = "TIME : " + now.ToString();

}

これはGUITextのオブジェクトを配置して、そこにスクリプトを仕込んでます。

 

完成!

そして、何とか完成しました…!

f:id:masatolan:20131120105205j:plain

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

 

本当は、以前のようにエフェクトや効果音も付けようかと思いましたが、コースを作るのに意外と時間が掛かってしまい、力尽きました…。

  

走る系ゲームの作成で、参考にした書籍!
Unity4入門   最新開発環境による簡単3Dゲーム製作

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