[Unity]ゴールしたらクリアシーンに遷移させる方法

現時点では、ゴール地点へたどり着けるものの、何もレスポンスもないのでゴールしたという実感があまりありません。

そこで、プレイヤーがゴールの旗に触れたらクリアシーンに遷移するようにしましょう。

スポンサーリンク

ゴール地点に到着したらクリアシーンに遷移させるまで

まずは、Physicsを使って衝突を検出することから始めます。

プレイヤーとゴール地点(旗)の当たり判定を作成

既にプレイヤーにはRigidbodyコンポーネント及びColliderコンポーネントをアタッチしているので、Triggerモードで当たり判定を作ります。

Triggerモードとは、衝突検出だけを行うモードの事で、プレイヤーが跳ね返るなどの物理挙動を返しません。今回の場合は当たり判定だけしたいのでTriggerモードにします。

まずは、ゴール地点の旗に対してBox Collider 2Dコンポーネントをアタッチします。

旗を選択して「Add Component」→「Physics 2D」→「BoxCollider2D」を選択。

Box Collider 2D項目のIs Triggerのチェックボックスをチェックします。

Unityにて当たり判定をTriggerモードに設定する

これで、プレイヤーと旗の当たり判定を行う準備が整いました。

クリアシーンを作成する

クリアシーンの画面は、ペイントで作成しました。

クリアシーンの素材

デザインは得意ではないのですが、超簡易的でごめんなさい。色々探せばおしゃれなゲームクリア画面のフリー素材もあるのではないでしょうか。

まずは、今あるゲームシーンをセーブしておきます。

新しいシーンは、「File」→「New Scene」で作成できます。

シーン名は分かりやすく「ClearScene」にしました。

プロジェクトウィンドウからクリア画像を選択してシーンビューにもってきます。Potisionは「0,0,0」にしておきます。これでクリア画面は完成です。

ゲームシーンからクリアシーンへ遷移させるスクリプト

ゲームをクリアしたら、今作ったクリアシーンへ遷移させましょう。

ゲームシーンに戻ってプレイヤーのスクリプトにちょいと追記します。

ゲームをクリアしたらクリアシーンに遷移させるスクリプト

赤枠が追記部分です。

まずは、LoadSceneを利用するために4行目で「using UnityEngine.SceneManagement;」を追加しています。

プレイヤーと旗の当たり判定は「OnTriggerEnter2D」メソッドで検知します。

オブジェクトの衝突時に呼ばれるメソッドが決まっていて、衝突した瞬間は「OnTriggerEnter2D」メソッドが呼び出されます。

シーンを登録しよう

このまま実行!といきたいところですが、恐らくエラーになることでしょう。

エラーの原因は、Unityにシーンの登録を行っていないからです。

どの順番でどのシーンを使うのかUnityに伝える必要があります。

というわけで「File」→「Build Settings」を選択して、プロジェクトウィンドウから「GameScene」と「ClearScene」をドラッグ&ドロップします。

Unityにゲームとクリアシーンを登録する

シーンの右に数字が振られていますが、基本的に0番のシーンからスタートします。

現時点でスタートシーンなどありませんので、ゲームシーンが「0」になるようにします。

SampleSceneは使わないのでチェックを外しておきます。

これでクリアシーンに遷移するか実行してみましょう。

このように、旗に触れた際に遷移すればOK。

それにしても歩いてるのか走ってるのか分からんね・・・。

クリアシーンからゲームシーンに遷移させる

今度は逆に、クリアシーンからゲームシーンに戻るようにしてみます。

新しいスクリプトを作成してファイル名を「ClearC」としておきます。

クリアシーンからゲームシーンに遷移させるスクリプト

スクリプトの内容はこんな感じですね。マウスがクリックされたことを検知したら先ほどと同じようにLoadSceneを使ってゲームシーンに飛ばしています。

空のオブジェクトを作成してこのスクリプトをアタッチします。

ゲームを実行して、クリアからゲームシーンに遷移すればOKです。

ゲームとして大体完成に近づいてきましたが、ゲームをプレイしていて気になる点があります。

次回はその修正から行っていきます。