現時点では、ゴール地点へたどり着けるものの、何もレスポンスもないのでゴールしたという実感があまりありません。
そこで、プレイヤーがゴールの旗に触れたらクリアシーンに遷移するようにしましょう。
ゴール地点に到着したらクリアシーンに遷移させるまで
まずは、Physicsを使って衝突を検出することから始めます。
プレイヤーとゴール地点(旗)の当たり判定を作成
既にプレイヤーにはRigidbodyコンポーネント及びColliderコンポーネントをアタッチしているので、Triggerモードで当たり判定を作ります。
Triggerモードとは、衝突検出だけを行うモードの事で、プレイヤーが跳ね返るなどの物理挙動を返しません。今回の場合は当たり判定だけしたいのでTriggerモードにします。
まずは、ゴール地点の旗に対してBox Collider 2Dコンポーネントをアタッチします。
旗を選択して「Add Component」→「Physics 2D」→「BoxCollider2D」を選択。
Box Collider 2D項目のIs Triggerのチェックボックスをチェックします。
これで、プレイヤーと旗の当たり判定を行う準備が整いました。
クリアシーンを作成する
クリアシーンの画面は、ペイントで作成しました。
デザインは得意ではないのですが、超簡易的でごめんなさい。色々探せばおしゃれなゲームクリア画面のフリー素材もあるのではないでしょうか。
まずは、今あるゲームシーンをセーブしておきます。
新しいシーンは、「File」→「New Scene」で作成できます。
シーン名は分かりやすく「ClearScene」にしました。
プロジェクトウィンドウからクリア画像を選択してシーンビューにもってきます。Potisionは「0,0,0」にしておきます。これでクリア画面は完成です。
ゲームシーンからクリアシーンへ遷移させるスクリプト
ゲームをクリアしたら、今作ったクリアシーンへ遷移させましょう。
ゲームシーンに戻ってプレイヤーのスクリプトにちょいと追記します。
赤枠が追記部分です。
まずは、LoadSceneを利用するために4行目で「using UnityEngine.SceneManagement;」を追加しています。
プレイヤーと旗の当たり判定は「OnTriggerEnter2D」メソッドで検知します。
オブジェクトの衝突時に呼ばれるメソッドが決まっていて、衝突した瞬間は「OnTriggerEnter2D」メソッドが呼び出されます。
シーンを登録しよう
このまま実行!といきたいところですが、恐らくエラーになることでしょう。
エラーの原因は、Unityにシーンの登録を行っていないからです。
どの順番でどのシーンを使うのかUnityに伝える必要があります。
というわけで「File」→「Build Settings」を選択して、プロジェクトウィンドウから「GameScene」と「ClearScene」をドラッグ&ドロップします。
シーンの右に数字が振られていますが、基本的に0番のシーンからスタートします。
現時点でスタートシーンなどありませんので、ゲームシーンが「0」になるようにします。
SampleSceneは使わないのでチェックを外しておきます。
これでクリアシーンに遷移するか実行してみましょう。
このように、旗に触れた際に遷移すればOK。
それにしても歩いてるのか走ってるのか分からんね・・・。
クリアシーンからゲームシーンに遷移させる
今度は逆に、クリアシーンからゲームシーンに戻るようにしてみます。
新しいスクリプトを作成してファイル名を「ClearC」としておきます。
スクリプトの内容はこんな感じですね。マウスがクリックされたことを検知したら先ほどと同じようにLoadSceneを使ってゲームシーンに飛ばしています。
空のオブジェクトを作成してこのスクリプトをアタッチします。
ゲームを実行して、クリアからゲームシーンに遷移すればOKです。
ゲームとして大体完成に近づいてきましたが、ゲームをプレイしていて気になる点があります。
次回はその修正から行っていきます。