Unity ノンフィールドRPGの作り方3 シングルトンを使ってゲームマネージャーを実装/BGMと効果音を実装 | Unity入門の森 ゲームの作り方

Unity ノンフィールドRPGの作り方3 シングルトンを使ってゲームマネージャーを実装/BGMと効果音を実装

Unity 初心者向けノンフィールドRPGの作り方 (スマホ化対応)

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

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

この講座はUnity 初心者向けノンフィールドRPGの作り方講座の第3回です。

前回はTextMeshProやButtonオブジェクトを配置してタイトルシーンを作成しました。

前回の記事:

Unity 初心者向けノンフィールドRPGの作り方2 タイトルとゲームマネージャーを作る
この講座はUnity 初心者向けノンフィールドRPGの作り方講座の第2回です。前回はプロジェクトの作成と画像素材のインポート、TextMeshProの準備を行いました。前回の記事:第2回では各シーン、中でもタイトルシーンを制作し、ゲーム進行...

第3回ではタイトルシーンから別のシーンに移行するためのスクリプトや音楽を再生する機能を実装します。

【ゲームの作り方講座プレゼント中!】

シングルトンを使ってシーン遷移処理をゲームマネージャーに実装する

Unityではシーン遷移する場合、まず遷移前のシーンにあるゲームオブジェクトを全て破壊します。その後、遷移後のシーンに配置されたゲームオブジェクトの初期化処理が始まります。

ですが、この仕組みだとあるシーンから別のシーンへデータを保持したまま遷移することができません。ゲーム中でデータを引継ぎながら処理したいときは結構多いです。

そんなときの対応方法はいくつかありますが、よく使われるのがシングルトンというオブジェクトの設計手法です。

シングルトンは「インスタンスが1つしか存在しないことを保証するデザインパターン」です。

ゲーム制作では”どのシーンからでも共通して使えるデータ管理オブジェクト”を作る際に重宝されます。

プレイヤーの所持金、ステージ進行度、設定情報など、シーンが変わっても残しておきたいデータを扱いたい場合にシングルトンは非常に有効です。

今回はGameManagerオブジェクトに”シーンが変わっても残しておきたいデータを管理する”機能を担ってもらいます。

そのためGameManagerクラスをシングルトン設計にします。これでどのシーンからでもアクセスできるようにします。

実際のシーンの遷移処理もGameManagerクラスで行います。

それでは、実際にGameManagerクラスを書き換えていきましょう。

GameManager.cs

↑黄色く色付けしたところが新しく追加した命令になります。

まず、シーンをロードするLoadSceneメソッドを使えるようにusing文でUnityEngine.SceneManagementを追加しました。

次に、シーンファイルの名前をenum型で定義しておきます。LoadSceneメソッドは遷移したいシーンを文字列で指定して使いますが、この際に書き間違いによるエラーを防ぐためです。

定義する文字列は必ずシーンファイル名と同じにしておきます。

例えばSceneManager.LoadScene(“Tilte”) のようにスペルミスがあると、実行時エラーが発生してしまいます。enumを使えばコンパイル時にエラーを検出できるため安全性が高まります。

シーンの名前がenum型の中で集中管理されていることで、シーン遷移の設計が把握しやすくなり、複雑なゲームになった場合でも保守しやすくなります。

LoadSceneメソッドでは受け取ったSceneCode型の引数を文字列に変換してLoadSceneメソッドに渡します。またこのメソッドは静的メソッドとして定義します。これは後の講座で実装しますがGameManagerが実体化される前に呼び出す予定だからです。

また、シングルトン設計を行っている箇所が

public static GameManager Instance;

private void Awake() { ~~~ }

の部分です。staticを付けたオブジェクトは静的オブジェクトとなり、このクラス以外どこからでも参照可能になります。

Awakeはゲームシーンが始まったら真っ先に実行する処理を意味しています。

Awakeの中の命令の書き方はイディオムのようなもので、一度も作られてなければ生成し、このクラスから作られるインスタンスが消えないようにする。既に存在している場合は自身を削除してインスタンスが2つ以上存在しないことを保証します。

この機能を与えるイディオムをシングルトンパターンと呼びます。

ここまでスクリプトを変更できたら一度Unityで再生ボタンを押してみましょう。

Hierarchy画面でGameManagerオブジェクトが他とは異なり、DontDestroyOnLoadというところに存在していることがわかります。

DontDestroyOnLoadはこのシーンが終わっても破壊されないで残るオブジェクトを意味しています。

オーディオ再生機能をSoundManagerに実装する

オーディオの再生はSoundManagerが処理します。SoundManagerもGameManagerと同様どこからでもアクセスできるシングルトン設計にします。

SoundManager.cs

まずはゲームで音声を使えるようにするためにpublic AudioClip ~~を宣言します。

BGMを再生する際は同じ曲(AudioClip)を引き続き再生した場合でも曲の最初から再生されないようにif文で処理しています。単にaudioSource.Play()を呼び出すよりゲームとして仕上がりが良くなります。

効果音の再生では、元々用意されているPlayOneShotメソッドを呼び出しています。

AudioClipをSoundManagerコンポーネントにアタッチする

Unityではドラッグ&ドロップでオブジェクトやスクリプトをコンポーネントに紐づけることをアタッチといいます。

ここではHierarchyウィンドウにあるSoundMangerオブジェクトを選択してInspectorビューを表示し、BGMやSEをアタッチしていきます。

↑Inspectorビューを表示した状態。

続きを読む
このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

まとめ

ここまででタイトルシーンで画面をタッチ(クリック)するとタイトルシーンからダンジョンシーンに遷移するようになりました。

次回からダンジョンシーンを制作していきます。

次の記事:

Unity ノンフィールドRPGの作り方4 ダンジョン探索画面のUIを実装しよう
この講座はUnity 初心者向けノンフィールドRPGの作り方講座の第4回です。前回はタイトル画面からダンジョン画面へ移行するための基本となる機能やオーディオ再生機能をシングルトンを用いて実装しました。前回の記事:ここからはノンフィールドRP...

Unity ノンフィールドRPGの作り方講座に戻る>>

【ゲームの作り方講座もプレゼント中!】

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

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

コメント

タイトルとURLをコピーしました