現場レベルのゲーム制作が、すべてここで学べます。
この記事はノンフィールドRPGの作り方講座の第13回です。
前回は攻撃時や被ダメージ時の演出、バトル勝利・敗北時の処理、さらに勝利時のレベルアップ処理を実装しました。
前回の記事:

第13回ではゲームオーバー時のリザルトシーンの作成を行います。
リザルトシーンの背景とカメラの設定を行う
リザルトシーンを作成していきます。[Assets]→[Scenes]にある[Result]をダブルクリックしてリザルトシーンを開きます。
[Window]→[Rendering]→[Lighting]の順でクリックして、Lightingを開きます。

上にある[Environment]をクリックしてEnvironmentを表示します。
Environmentの一番上にある[Skybox Material]の右にあるオブジェクトピッカーをクリックして、[None]を選択します。
カメラの設定を行う
背景を黒くするためにカメラの設定を変更します。
Hierarchyビューにある[Main Camera]をクリックしてInspectorビューを表示します。

Transformを上記のとおり設定します。Cameraコンポーネントの[Clear Flags]を「Solid Color」に変更し、Backgroundの色を黒に変更します。

Gameビューを開いて背景が黒になっていることを確認します。
リザルトシーンで流す音楽を準備しよう
リザルトシーンのBGM準備をします。
タイトルシーンでのBGM処理と同じようにまずはAudioClipをアタッチするための変数を宣言します。そしてダンジョンシーンのBGMを再生するメソッドを追加していきます。
SoundManager.cs
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
using UnityEngine; public class SoundManager : MonoBehaviour { public static SoundManager Instance; private AudioSource[] audioSources;// アタッチした2つのAudioSorceを代入 private AudioSource audioSource; private AudioSource bgmSource;// BGM用のAudioSource public AudioClip TitleBGM; public AudioClip DungeonBGM; public AudioClip BattleBGM; public AudioClip ResultBGM; public AudioClip TouchSE; public AudioClip RecoverySE; public AudioClip DamageSE; public AudioClip EnemyDamageSE; public AudioClip GuardSE; public AudioClip LevelupSE; private void Awake() { if (Instance == null) { Instance = this; audioSources = GetComponents<AudioSource>();// アタッチした2つのAudioSorceを配列で取得 audioSource = audioSources[0];// 1つめを効果音用にする bgmSource = audioSources[1];// 2つめをBGM用にする DontDestroyOnLoad(this); } else { Destroy(gameObject); } } // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { } // Update is called once per frame void Update() { } private void PlayBgm(AudioClip audioClip) { if (bgmSource.clip == audioClip) return;// すでに再生されているBGMなら処理しない bgmSource.clip = audioClip; bgmSource.Play(); } public void PlayTitleBGM() { PlayBgm(TitleBGM); } public void PlayDungeonBGM() { PlayBgm(DungeonBGM); } public void PlayBattleBGM() { PlayBgm(BattleBGM); } public void PlayResultBGM() { PlayBgm(ResultBGM); } public void PlayTouchSE() { audioSource.PlayOneShot(TouchSE); } public void PlayRecoverySE() { audioSource.PlayOneShot(RecoverySE); } public void PlayDamageSE() { audioSource.PlayOneShot(DamageSE); } public void PlayEnemyDamageSE() { audioSource.PlayOneShot(EnemyDamageSE); } public void PlayGuardSE() { audioSource.PlayOneShot(GuardSE); } public void PlayLevelupSE() { audioSource.PlayOneShot(LevelupSE); } public void StopBGM() { bgmSource.Stop(); } } |
AudioClipをアタッチする
SoundManagerオブジェクトにAudioClipをアタッチするため、一度[Assets]→[Scenes]にある[Title]をダブルクリックしてタイトルシーンに戻ります。
必ず保存してから別のシーンを開くようにしましょう。
ではタイトルシーンのHierarchyビューにあるSoundManagerオブジェクトをクリックしてInspectorビューを表示します。
AssetStoreからインポートしたフォルダ[LUShvalleySound]→[LUShvalleySound_FantasyBGM_FreePackVol.01]→[LVSD-0006_11_StellarStage_loop]をドラッグアンドドロップします。

(↑この画面操作では最初にインスペクターのカギマークをクリックして画面固定を行ってからBGMデータをアタッチしています。終わったらカギマークを外しておきましょう)

それではTitleシーンを保存してから再びResultシーンに戻りましょう。
リザルトシーンのUIを作成 GAMEOVERの文字と取得ポイントの表示
ここからはゲームオーバー画面に必要なUIを構築していきましょう。
「GAME OVER」の文字の表示と、取得ポイントの表示をするUIを作成します。
取得ポイントは次の周回前にプレイヤーキャラクターの強化に使います。いわゆる経験値の役割ですね。
まずHierarchyビューを右クリックし、[UI]→[Canvas]をクリックします。

Canvasオブジェクトを選択してInspectorビューを開きます。

他のシーンと同じように、Canvas Scalerコンポーネントの[UI Scale Mode]を[Scale With Screen Size]に変更します。
[Reference Resolution]のXを1080にYを1920に変更します。 [Screen Match Mode]を[Expand]に変更します。GAME OVERのテキスト作成
HierarchyビューにあるCanvasオブジェクトを右クリックし、[UI]→[Text – TextMeshPro]を選んでテキストオブジェクトを追加します。名前はGameOverにします。

作成したGameOverオブジェクトのInspectorビューを開き、下の画像のとおり設定します。

以下のようなゲームオーバー画面が表示されていればOKです。

取得ポイントのテキスト作成
HierarchyビューにあるCanvasオブジェクトを右クリックし、[UI]→[Text – TextMeshPro]を選んでテキストオブジェクトを追加します。名前はPointCaptionにします。
さらにもう一回、[UI]→[Text – TextMeshPro]を選んでテキストオブジェクトを追加します。名前はPointValueにします。

作成したPointCaptionオブジェクトとPointValueオブジェクトのInspectorビューを開き、下の画像のとおり設定します。

設定ができていれば以下のような画面になります。

タッチ用のボタンを作成する
リザルト画面をタッチした際にタイトルシーンに遷移するボタンを作っていきます。
まずはHierarchyビューにあるCanvasオブジェクトを右クリックし、[UI]→[Panel]をクリックします。

PanelオブジェクトはHierarchyビューで必ずGameOver、PointCaption、PointValueの下に置いてください。Unityでは下側にあるオブジェクトほど手前に表示されるのでタップパネルは手前、つまり他のオブジェクトの下側に置きます。
次にPanelオブジェクトを選択してInspectorビューを開きます。

ImageコンポーネントのColorをクリックします。

A値(アルファ値)を0にして透明にします。


Inspectorビューの下にある[Add Component]をクリックして、検索バーに「Button」と入力します。
一覧に[Button]が表示されるのでクリックして、[Button]コンポーネントを追加します。
タッチして動作させるためにはButtonコンポーネントのOnClickイベントに処理を登録する必要がありますが、スクリプトを作成してから行います。
リザルトシーンの進行に必要なオブジェクトとC#スクリプトを準備する
Hierarchyビューを右クリックするか、Hierarchyビューの+ボタンをクリックし、[Create Empty]をクリックして空のオブジェクトを作成しましょう。オブジェクトの名前はDirectorとします。

次に[Assets/Scripts]フォルダを選択して右クリックし、[Create]→[Scripting]→[MonoBehaviour Script]をクリックします。
フォルダ内にスクリプトファイルが作成されるので名前を「ResultDirector」とします。

次にHierarchyビューにあるDirectorオブジェクトを選択してInspectorビューを表示します。

一番下にある[Add Component]をクリックし、検索バーにResultと入力します。表示される一覧の中に「Result Director」が表示されるのでクリックしてアタッチします(スクリプトファイルを直接オブジェクトにドラッグアンドドロップしてアタッチすることもできます)。
リザルトシーンを完成させる BGM再生・経験値ポイント取得・タイトル遷移処理を実装
リザルトシーンでBGMを再生、ポイントの取得、タッチしたらタイトル画面に遷移する処理を実装します。
まとめ
今回はリザルトシーンを完成させました。Unityで実行してみましょう。

今回はゲームオーバー時のリザルトシーンを作成しました。敗北処理ができあがりひとまず全てのシーンがつながりました。
次回がいよいよ最後です。タイトルシーンで次の周回をプレイする前にキャラクターの強化を行えるようにします。
冒険で取得した経験値を使ってのキャラ強化はハクスラゲームやノンフィールドRPGの醍醐味の一つです。
そしてセーブ・ロードのシステムを構築しゲームを完成させます。

現場レベルのゲーム制作が、すべてここで学べます。






コメント