2時間かけて、Unity4のMecanimを利用した「走る系」ゲーム作ったので手順を紹介します!
どうもです!
すっかりUnityエンジンが病みつきになってます…。
今回は、AssetStoreをブラブラ見ていたら、無料のちょうど良い感じの3Dモデルを発見したので、どうしても走らせたくなり…くだらないゲームをまた作ってしまいましたのでご紹介です。ちなみに…製作時間2時間くらいなので、それ相応のクオリティです。
(自分用に、手順を忘れないためのメモ代わりでもあります…)
まずは素材集めから!
AssetStoreで発見したのが、こちらのモデル!
このクオリティで無料なのがスゴイ。思わず、走らせたくなりました…。
(Mecanimスターターキットも一緒に入手済み)
あとは、走らせる道路に貼り付けるテクスチャも、ついでにゲットします。
とりあえず、これだけあればOKです。
3Dモデルを動けるようにする!
先ほどゲットした3Dモデルを、自由に動けるようにする手順を以下に解説しているので、まずは一読くださいませ。
「Unity4の「Mecanim」で手っ取り早く3Dモデルを動かしてみたら感動した! - Unity不定期便」
ここに書いている手順通りに進めると、PCのキーボードから自由自在に動かすことができるようになります。
Mecanimの機能を使っているので、とてもリアルな動きをしてくれます。(ちなみに、コーディング無しで出来ます)
道路に仕掛けを作る!
キャラクターが、単純に道路を走るだけだとちょっとつまらないかなぁ〜と思ったので、コース途中に動く道路を作りました。
この白い道路が左右にゆっくり動くアニメーションをします。
Unity搭載の「Animation」を使って動かしています。こちらも、以下に詳しく手順を解説しましたので、使い方をご存知無い方は御覧ください。
「Unity4の「Animation」でオブジェクトをプログラミング無しで動かしてみる! - Unity不定期便」
コースを作る!
今回、キャラクターに走らせるコースの全体図がこちら!
。
かなりザックリなコースですが、全長200mくらいは走るようになってます。
一応、小さな仕掛けも散りばめました。
障害物、スロープ、壁、動く道路など…があります。
とりあえずこんなもんで良いでしょう…。
これらはすべて、Cubeから生成してひたすらオブジェクトを置いていきました。もっと効率的な方法があるかと思いますが…。
ゲームのルールを作る!
まずは、コースから落ちたらゲームオーバーになるという要素を仕込みます。
そのため、コースの真下にCubeで作った巨大な床を配置します。
ちなみに、Cubeのインスペクター画面から「MeshRenderer」の項目を削除して透明にしてから、「BoxCollider」のIs Triggerにチェックを入れてます。
これで、キャラクターがコースから落ちて巨大な床に接触したら、「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 );
}
}
}
ちなみに、上記のスクリプトだけはゴールした時に反応させるオブジェクトに仕込んでます。
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のオブジェクトを配置して、そこにスクリプトを仕込んでます。
完成!
そして、何とか完成しました…!
【ゲームはコチラから遊べます!(PC環境推奨)】
本当は、以前のようにエフェクトや効果音も付けようかと思いましたが、コースを作るのに意外と時間が掛かってしまい、力尽きました…。
走る系ゲームの作成で、参考にした書籍!