Unity ローグライクカードバトルゲームの作り方21 セーブシステム・BGM・SEの実装とビルド方法を解説 | Unity入門の森 ゲームの作り方

Unity ローグライクカードバトルゲームの作り方21 セーブシステム・BGM・SEの実装とビルド方法を解説

Unity 本格カードゲームの作り方 ハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」を作る


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

この記事はUnityでハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」を作る講座の第21回です。

前回はダンジョンの無限階層化、デッキ補充システム、そして手札を捨てる処理を実装し、やり込みプレイに対応できるようにシステムを改良しました。

前回の記事:

Unity カードバトルRPGの作り方20 無限に遊べるダンジョン・デッキ補充・手札を捨てる処理の実装
この記事はUnityでハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」を作る講座の第20回です。 前回はバトル時にカード効果をわかりやすく表示するためのウィンドウシステムを実装しました。 前回の記事: 今回はリリース時のゲー...

リリースできるゲームに必要な要素が揃うまであと一息です。

最後にデータのセーブ機能と音楽・効果音の実装、デバッグシステムの見直しやビルドまわりの整備を行ってゲームを完成させましょう。


【Line登録者限定のプレゼントもあるよ!】

データのセーブ&ロード(PlayerPrefs)

現在はプレイ中のデータを保存する仕組みがありません。一度ゲーム終了すると次に起動した時にまた最初からやり直しになってしまいます。

前回の続きからプレイできるようにするため、保管中・デッキ内カードの数量や訓練場で強化した項目についてセーブ&ロードが自動的に行われる実装を行います。

 

セーブ&ロード機能を実装する方法はいくつかありますが、最も簡単なのはUnityに標準で搭載されている機能の1つであるPlayerPrefsを使用する事です。

PlayerPrefsでは、保存したいデータ(int型・float型・string型いずれかの変数)を個別のキー(string型)に結び付けることでゲーム中の任意のタイミングで読み取り・書き出しが可能になります。

保存したいデータの型を増やしたり、データをファイルに書き出したいという場合は他の方法を取る必要がありますが今回はPlayerPrefsで全てのセーブデータ管理を実装していきます。

 

PlayerPrefsの実装はスクリプト内のみで完了します。

機能 使用するメソッド 解説
変数データ保存(書き出し) SetFloat (キー, 値)
SetInt (キー, 値)
SetString (キー, 値)
キー:他のキーと重複なしのstring型
値:保存したい数値・文章データ
保存の適用 Save () Set〇〇系で保存した数値データをファイルに反映させる
変数データ取得(読み込み) GetFloat (キー, 値)
GetInt (キー, 値)
GetString (キー, 値)
キー:他のキーと重複なしのstring型
値:キーに対応する値がセーブデータに存在しなかった場合、代わりに読み取られる数値・文章
全データ消去 DeleteAll () 1キー分のデータを消去するDeleteKeyメソッドも存在する

Data.cs(一部省略)

ゲーム起動時やプレイヤーデータ変更時にPlayerPrefsの機能を追加していきます。

  • ゲームが初回起動なのか2回目以降の起動なのかをKey_Initに紐づくデータの有無で判断しています。
  • Set〇〇系とSaveメソッドは基本的に組み合わせて使います。

 

続いてPlayerDeckDataクラスを拡張し、保管中カードとデッキ内カードの情報をセーブ&ロードできるように対応します。

また、もしデバッグ処理が残っているならこのタイミングでDataInitialize()からデバッグ処理を消しておきましょう。

PlayerDeckData.cs

では、次にPlayerDeckData.csを修正します。

続きを読む

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

なおエディター画面左上[Edit]から下の方にある[Clear All PrayerPrefs]を選択するとテストプレイでのセーブデータを全て消去できます。 

 

音楽(BGM)を付けてカードゲームの雰囲気を盛り上げる

ここからはゲームプレイの体験をより良いものにするため、今まで無音だったこのゲームにサウンド機能を実装していきます。まずは音楽(BGM)から用意します。

BGMファイルの用意

音楽系素材は再配布可のものが少ないので、この講座では音楽や効果音の素材を配布は行いません。お手持ちの音楽ファイルを使用していただくか、以下の素材サイト様などを使用して揃えていきましょう。

無料音楽素材サイト
魔王魂
BGMer
PeriTune

Unityは殆どの音楽ファイルの形式に対応していますので問題なくインポートが可能です。

素材サイトでは.mp3形式で配布されているものが多いのでそれで問題ありませんが、より軽量化などを行いたい場合は.ogg形式のものを選ぶのがオススメです。

 

用意するべき曲数についてはタイトル画面で流すBGMが1曲、ステージ画面で流すBGMがステージの個数ごとに1曲ずつ必要です。

ファイルが用意できたらAssets/Audios以下にBGMフォルダを作成し、その中にインポートしていきましょう。

タイトル画面BGM

Unity内で音楽ファイルを再生する時はオブジェクトにAudioSourceコンポーネントを取り付て使います。まずはTitleシーンのManagersオブジェクトに取り付けてみましょう(AddComponent→Audio→AudioSource)。

コンポーネント内の重要なパラメータは以下になります。

AudioClip 再生対象の音楽ファイル (スクリプトではAudioClip型として扱われる)
Play On Awake ONにするとシーン開始時(オブジェクト生成時)に再生開始する
Loop ONにすると最後まで再生完了した後、もう一度最初から再生を繰り返す
Volume 音量(0.0~1.0)

 

タイトルBGM再生用の設定例は以下のようになります。(Title.oggを設定時)

ステージBGM

Battleシーンでのステージ攻略中に再生するBGMはステージごとに個別に設定します。先ほどのAudioClipやVolumeなどのパラメータは勿論スクリプトで変更する事も可能です。

まずはステージデータ(StageSO)に対してそれぞれ固有の音楽ファイル(AudioClip)をInspectorから指定できるようにします。

StageSO.cs

これでそのステージ専用のBGMを指定できるようになりました。

 

またBattleシーンのManagersオブジェクトにBGM再生用のAudioSourceをアタッチしておきます。

AudioClipはスクリプトから指定するので変更不要で、Play On Awakeはオフにする必要があります。

それではスクリプトからBGM再生処理を呼び出しましょう。

BattleManager.cs内 Startメソッド

GetComponentでAudioSourceの参照を取得しているのでInspectorの操作は不要です。

テストプレイをしてみましょう。ステージに入ったらそのステージ用のBGMが流れることが確認できるはずです。

 

SE(効果音)を付けてプレイ時の躍動感を高めよう

BGMが導入できたので同様に効果音(SE)も実装していきましょう。

SEファイルの用意

BGMと同様に.mp3や.ogg等の形式の音楽ファイルをインポートしていきます。

無料効果音素材サイト
魔王魂
効果音ラボ
効果音工房

用意すべきファイル数は任意です。この講座ではボタンを押した時の効果音2種と敵にダメージを与えた時の効果音、プレイヤーがダメージを受けた時の効果音で計4ファイルを使用します。

ファイルを用意できたらAssets/Audiosフォルダ以下にSEフォルダを作成し、その中にインポートしていきます。

  • Projectビューにおける各ファイルアイコンの表示サイズは右下のスライドバーから変更できます。

 

効果音マネージャ作成

BGMと同様にシーン上のオブジェクトにAudioSourceをアタッチして再生処理を呼び出す…という形にしても良いですが、効果音は同じファイルを別の場所で何度も使いまわすことが多いので今回は別の形をとります。

 

シーンを跨いで存続できるDataManagerオブジェクトを利用し、ここに効果音再生システムを担う効果音マネージャを作成します。

DataManagerプレハブをプレハブ編集状態にしたら空の子オブジェクトを作成し、名前をSEManagerとします。

続いてこのオブジェクトにアタッチする効果音再生を管理するスクリプトであるSEManagerクラスを作成します。

8行目のRequireComponent属性は、このクラスをオブジェクトにアタッチする時に同時に必要となるコンポーネントを指定するものです。今回はAudioSourceが必須コンポーネントとなるのでそれを指定しています。もしクラスのアタッチ時に必須コンポーネントが足りていない場合は自動的にそれを追加でアタッチしてくれるようになります。

SE再生時にPlayメソッドではなくPlayOneShotメソッドを使用しています。これは効果音再生に特化したメソッドで、再生対象のAudioClipを渡すと同時に連続で効果音を再生させてもきちんと別々で処理してくれるようになります。

 

このスクリプトをSEManagerオブジェクトにアタッチすればAudioSourceも同時にアタッチされている事が確認できます。

AudioSourceの設定については効果音の再生に適した設定に変更しておきます。

SEManagerコンポーネントのseClipsリストには対象の効果音ファイルを指定します。スクリプト内でEnumで定義したSENameリストと同じ並びになるよう指定する必要があります。この講座では「ボタン音A」「ボタン音B」「敵にダメージ」「プレイヤーにダメージ」の順番にしていますが、もちろん変更してもOKです。

 

効果音再生処理呼び出し

効果音マネージャの準備が完了したので早速効果音を鳴らしたい箇所にて再生処理を呼び出します。

SEManagerクラスはpublic&staticで自身への参照を持っているので簡単に他のクラスから再生処理を呼び出せるようになっています。一例としてボタン音Aを再生したいなら以下のように呼び出します。

 

試しにStageSelectWindowクラスを編集し、ステージ選択画面上のボタンがタップされた時に効果音を鳴らすようにしてみましょう。

StageSelectWindow.cs(一部省略)

テストプレイにて各種効果音が聞こえる事を確認できれば成功です。

※この動画では音が出ます

これらの処理を他のウィンドウでも同じように組み込んでいけばタイトル画面全体に効果音が付き豪華な印象になっていきます。

戦闘中の効果音

各種ダメージ音も導入しているので戦闘中に効果音を鳴らす処理についても一例を紹介します。

ダメージ音はHPが減少する時に鳴らすのでCharacterManagerクラスでも構いませんが、今回はPlayBoardManagerクラスにて再生処理を呼び出すようにします。

PlayBoardManager.cs内 PlayCardメソッドの末尾

これでダメージ音の再生が行われるようになりました。最大HPへのダメージ時にも効果音を鳴らすようにしていますが、通常ダメージと最大HPダメージについては違う効果音を使い分けるのも良いでしょう。

仕上げ&ビルド 完成したゲームを実機でプレイしてみよう

お疲れ様です。ここまでの21章分でハクスラローグライクカードバトルRPG「呪術迷宮」に必要な機能を最低限ではありますが無事実装することができました。

リリース版呪術迷宮と比較すると、敵やカードの増産過程、一部の処理や装飾まわりのエフェクト、アップデート時などに加えたもの等、未実装な部分もありますが、応用性のある開発スキルや一つのリリースレベルのゲームを作る流れを多数経験できたかと思います。

ここで機能開発は一区切りとなります。最後に仕上げをしていきましょう。

デバッグ処理の調整

まず、TrainingWindowクラスやShoppingWindowクラスの初期化時にデバッグ処理がまだ残っているならそれらを削除しておきましょう。

もし経験値や金貨の一括獲得ボタンが欲しいならデバッグキーとしてTitleManagerに追加するのがオススメです。

  • タイトル画面でCキーを押下すると経験値&金貨を獲得するデバッグキーです。訓練場・術札屋画面への反映が必要なので一旦シーンを再読み込みしています。

効果音の充実

先ほど効果音を4種類実装しましたが、効果音は基本的には多いほどゲームが豪華になるので余裕があるならどんどんファイル数を増やしていくと良いでしょう。

特にボタンをタップした時には何かしらの音が鳴っていた方が、プレイヤーに「入力に成功した」という合図による安心感を与えられます。

ぜひゲーム中の様々なボタン入力の場面でSE再生処理を呼び出すようにしてみてください。

その他、戦闘中でカードを出すタイミングや手札が配られるとき、毒を喰らったときや戦闘開始時、戦闘終了時など効果音を入れることでゲームを盛り上げることができそうですね。あなたの好きな形でカスタマイズして効果音一つでゲームプレイの感覚が変わることを体感してみてください。

バランス調整&設定ファイルの充実

ここまで設定してきた各種のゲームデータファイル…例えばカードデータや敵データ、ステージデータ等はあくまで動作確認のための暫定的な設定にしてきたと思います。

これをゲームとして楽しく遊べるようにオリジナルな設定に変更してみましょう。特にカードの効果については作り方がある程度分かってきた方は新規効果処理の自作にもチャレンジしてみてください。

そして忘れてはいけないのがバランス調整です。手軽に遊べるゲームにするか、ルールを熟知して的確にデッキを組めないとクリアできない難易度にするかは人それぞれです。自分でテストプレイを繰り返し、丁度良いと思った難易度になるまで調整を続けていきましょう。

ただし、呪術迷宮はリリースされているゲームになるのでコピー作品の公開等は控えていただきますようよろしくお願いいたします。

実機へのビルド

ゲームをスマートフォンの端末で遊べるようにするにはビルド(Build)の実行が必要になります。

ビルドの設定は1章や14章でも触れましたがBuildSettings画面で行えます。既にAndroid用にビルドを行う設定が済んでいるのでここは特に変更する必要がありませんが、作品名などの設定はPlayer Settingsという画面で行う必要があるのでBuildSettings画面左下のボタンから開いていきます。

 

PlayerSettings画面上部ではアプリ名・開発者名・アプリアイコン等の指定が行えます。下部には色々な表示が並んでいますがこれはプラットフォーム別の設定欄になり、現在開かれているのがAndroidビルド時の設定タブです。

Android用個別設定欄は基本的に変更すべき箇所は少ないです。ビルドに失敗する時やプラグインが増えて問題が起こった時に設定を確認するか、GooglePlayStoreに出品・アップデートを行う時にBundle Version Codeを変更するくらいでしょう。

 

ただし例外的に常に(どのプラットフォームでも)重要なのが[Resolution and Presentation]タブです。特にWindowsビルド時はここで解像度の設定が行えるので必ず確認する必要があります。

Androidにおいても端末でゲームをプレイする際の画面の向きを[Default Orientation]にて変更できるので見ておきましょう。

Default Orientation設定 端末での画面の向き
Portrait 縦向きで固定
Portrait Upside Down 縦向き・上下反転で固定
Landscape Right 横向き(左側が上)で固定
Landscape Left 横向き(右側が上)で固定
Auto Rotation スマートフォンの現在の画面の向きに合わせる

このゲームは横向きの画面で作っているので、Landscape RightかLandscape Leftのどちらかを設定しておくと良いでしょう。

スマートフォンを開発者モードでPCに接続し、先ほどのBuild Settings画面の右下から[Build And Run]ボタンをクリックすると実機へのビルドが開始されます(初回は出力するapkファイルの場所と名前を指定します)。

完了するとそのままゲームが起動されます。[Build]ボタンをクリックした場合はapkファイルの出力のみが行われます。この2つのボタンについてはエディター画面左上のFileタブから選択する事も出来ます。

手持ちのAndroidスマートフォンでぜひ遊んでみましょう!

 

まとめ

これでスマートフォンの実機でゲームを遊べるようになるところまで作れました。お疲れ様でした!

基本的な設計はこれで完了ですが、まだまだ新要素・新機能を組み込む余地が沢山あります。ここまでで身に着けたUnityのスキルを活かしてぜひオリジナルゲーム開発を続けていってください。

『呪術迷宮』は既製品なので今回講座で作成したゲームのストアへの出品は不可とさせていただきますが、全てのグラフィックやカード等のデータを一新し、戦闘システム等も含め、独自性を高めたゲームができあがれば公開してみるのも良いでしょう。

オリジナルゲームを制作し、完成させ、他人からのフィードバックを得られれば新しい発見もあるはずです。

これからもUnityゲーム開発を楽しんで続けていきましょう。

講座を読んでいただきありがとうございました。

追記:この後もいくつかデッキ編集システムまわりで新機能を追加しました。追加機能の実装記事を執筆しました!

追加の章ではデッキ編集画面でカードをタップし、詳細ボタンを押したときにカード効果を見られるシステムを実装しています。

また、デッキのカードが増えてきたときのユーザビリティ向上のため、デッキ内カードソート機能を実装しています。余力のある人はもう1章分追加で実装してみましょう!

次の記事:

Unity カードバトルゲームの作り方22 デッキ編集画面にソート機能とカード詳細表示機能を追加する
この記事はUnityでハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」を作る講座の第22回目です。 前回までの記事で基本的なシステムは全て完成しましたが、さらにこのゲームを改良して遊びやすくしたいという方のために、改良の一例...

Unity ハクスラローグライク×デッキ構築型カードゲーム「呪術迷宮」の作り方講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

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