前々回から前回に掛けて画像を差し替える作業を行ってきました。
今回はよりゲームらしく仕立てるために、3回死んだらゲームオーバーという機能を実装してみたいと思います。

第7話 条件による分岐(条件の修正)

現在の内容ではゲームオーバーという概念が無いので、ゲームオーバーの条件を付けたいと思います。

内容としては、
1.プレーヤーが死ぬ条件を修正
2.死んだ回数をカウント
3.カウントした回数にリミットを設け、リミットに達するとゲームオーバー画面に遷移

1から順にやってみます!

まずはプレイヤーが落下すると死ぬというところから
cats
現在はプレイヤーのY軸(縦)が設定値以下に遷移すると死ぬ設定です。

↓こんな感じでプレイヤーオブジェクトに書かれていた
==============
if(transform.position.y < fallLimit){ var lvlName:String = Application.loadedLevelName; Application.LoadLevel(lvlName); }
==============

スクリプトは全くの無知なので、なんとなく解釈すると、
もし(if)Y軸の位置が(transform.position.y)<(より小さい)fallLimit(Y軸の値)
ようするにプレイヤーのY軸が規定Y軸の位置より小さくなると、
シーンの最初に戻る。

みたいな感じだと思います。
※間違ってたらごめんなさいm(_ _)m

これを、上の画像のようにするには、
1.落下判定をするオブジェクトを設置
2.落下判定オブジェクトにスクリプトを記述
3.落下した回数をカウント
4.落下に回数制限を設けてゲームオーバー画面に遷移

cats
HierarchyのCreateタブからCubeを選択してオブジェクトを追加します。
オブジェクトの名前をわかりやすいものに変更します。
今回は「DeathZone」にしました。

cats
作成したDeathZoneを落下地点に設置します。
Cube(Mesh Fillter)の歯車をクリックして、RemoveConponentをクリックすると、オブジェクトの表示が消えるので消してみます。
そして、BOX ColliderのIS Triggerにチェックを入れます。
これは、スクリプトで当たり判定を取る際に必要な箇所です。
要するにこれに触れるとなにか処理するみたいな時はチェックを入れるみたいです。

続いて落下した際の処理をするスクリプトを記述します。
cats
DeathZoneを選択してInspectorのAdd Componentをクリック、NewScriptをクリックしてJavaScriptをDeathZoneに追加します。
JSの名前はDeathZoneにしました。

ここからはスクリプトを書かなければいけません!!
筆者は全くの無知ですので、一からスクリプトを書くのはいくら時間があっても足りません!!
というかブログの更新頻度が下がって怒られます><

なので、このプロジェクトで使用している他のJSをコピペで持ってきました^^;
筆者がCompleteProjectから作り始めた一番の理由です!!

やりたいこと
・DeathZoneにプレイヤーが触れると、シーンの最初に戻る
・DeathZoneに触れた回数をカウント

上記の処理に近いのが、このプロジェクトだとコインを取得する処理です。
なので、コインを取得するスクリプトを見てみます。

==============
function OnTriggerEnter(other : Collider){
if(other.tag == "Player")
{ var score = GameObject.Find("Score");
score.BroadcastMessage("getCoin", SendMessageOptions.DontRequireReceiver);
Destroy(gameObject);
}
}
==============

なんだかよくわからないですが、
プレイヤーがこのオブジェクトに触れるとコインをゲットしてスコアに数値が加算されてコインのオブジェクトは消えます。
みたいな感じだと思います!
※間違っていても責任は取りません><

これをそのままDeathZoneに置き換えて、消える処理を削除して・・・

==============
function OnTriggerEnter(other : Collider){
if(other.tag == "Player"){
var score = GameObject.Find("Deth");
score.BroadcastMessage("getDeth", SendMessageOptions.DontRequireReceiver);
{
var lvlName:String = Application.loadedLevelName;
Application.LoadLevel(lvlName);
}
}
}
==============

こんな感じにしてみました!
※Dethのスペルが違う(Death)のは突っ込まないで下さい( -_-)

プレイヤーがオブジェクトに触れるとDethをゲットしてDethに数値を加算してシーンの最初に戻ります。
みたいな感じだと思います。

続いて、カウンターを作成します。
これもほとんどコピペで作ります。
CoinのカウントはScoreという名前のGUIでカウントしているようなので、
GUIごとコピペします。
※GUIとはグラフィックユーザーインターフェース、つまりボタンや数値などのUIです。多分。

続いてGUIの名前を変更します。(Dethという名前にしました)
中にScoreというスクリプトが記述されているので、スクリプトもコピペして名前をDethに変更、
GUIに入っているスクリプトをScoreからDethに変更します。

このスクリプトに書かれているCoinsなど参照していそうな怪しい箇所を全てDethに置き換えて、カウントされるか確認してみます。
cats
出来ました!!ちょっと感動です!!!
※ここまでスムーズに進んでいるようですが、結構苦戦してます^^;

最後にDethカウントにリミットを設ける処理を追記しました。

==============
function OnGUI () {
if( totalDeth >=  3 )
{
Application.LoadLevel("Result");
}
}
==============

このGUIが3以上の数値になると、Result(ゲームオーバー)に遷移します。
みたいな感じです。
指定しているシーンのResultはとりあえず空のシーンを作ってみました。

今回はちょっと長くなってしまいました!

次回は敵に当たるとカウントする処理を実装したいと思います。


この記事を書いた人
 石田 哲也  AIDパートナー様担当
 canvas facebook
神奈川県出身。輸入事業で起業後、広告代理店~リワードアドネットワーク~アプリ開発事業を経てライヴエイドに参画。