【Unity】RPGを作るチュートリアルその118 イベント関連の効果音を実装

【Unity】RPGを作るチュートリアルその118 イベント関連の効果音を実装

シンプルなRPGをUnityで作るチュートリアルシリーズの118回目です。

第117回ではタイトル画面の効果音、メニュー画面の効果音を実装しました。

今回はイベント関連の効果音を実装していきます。

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。

 

チュートリアルの一覧

このシリーズ全体の一覧は以下のページにまとめています。

 

前回の内容

前回はタイトル画面の効果音、メニュー画面の効果音を実装しました。

 

イベント関連の効果音

前回はタイトル画面やメニュー画面の効果音を実装しました。今回はイベント関連の効果音を実装していきましょう。

イベント関連では、

  • メッセージ送りの効果音
  • お店の効果音
  • 宿屋の効果音
  • 宝箱の効果音

を実装していきます。順番にやっていきましょう。

 

メッセージ送りの効果音

イベントでメッセージを表示する際にはメッセージ送りのアイコンを表示します。ユーザが決定ボタンを押す形になるので、選択した時の効果音を再生するようにしたいと思います。イベントプロセス側の処理として実装するため、「EventProcessMessage」を変更します。

ShowMessageProcess()ではキー入力を待つ処理があるので、キー入力を検知した際に効果音を再生するようにします。

 

お店の効果音

お店に関しては複数のクラスで効果音を再生する処理を入れていきます。

 

お店の選択肢ウィンドウ

前回効果音の処理を入れた通常の選択肢ウィンドウと同様に、お店の選択肢ウィンドウの制御クラスである「ShopOptionWindowController」でも再生の処理を入れます。

決定ボタンが押された時のOnPressedConfirmButton()のメソッドでは選択時の効果音を、キャンセルボタンが押された時のOnPressedCancelButton()のメソッドではキャンセル時の効果音をそれぞれ再生します。

 

お店の項目選択ウィンドウ

お店で買うアイテムや売るアイテムを選択するウィンドウを制御する「ShopItemWindowController」についても変更します。

決定ボタンとキャンセルボタンを押した時にそれぞれ効果音を再生します。OnPressedConfirmButton()の方ではメニュー画面と同様にreturnで抜ける可能性がある部分以降に再生処理を入れています。

 

退店時のメッセージ送り

細かい部分ですが、退店時のメッセージウィンドウではメッセージ送りのキー入力待ちがあるので「ShopManager」でも再生処理を入れます。

退店時のコルーチンであるWaitExitMessage()にて、キー入力が完了した後に選択時の効果音を再生します。

 

(バグ修正)同フレームでのキー入力検知を回避

今回の作業範囲を確認していたところ、お店の最初の選択肢で「買う」または「売る」を選んだ時に、そのまま選択ウィンドウの一番上の項目を選択してしまうようになっていました。以前は問題なかった気がしたのですが、気づいたらこうなっていたので「ShopManager」のファイルを開いたついでに修正しておきます。モルダー、あなた疲れてるのよ。

OnSelectedShopOption()のメソッド内では、もともと同じフレームの中で「_windowController.SetCanSelectState(true);」を呼んでいました。しかしこれだとお店の選択肢ウィンドウでのキー入力と同じフレームでキー入力が可能な状態になります。項目選択ウィンドウの処理順が「ShopManager」より後になる場合、そちらでも決定ボタンを検知して一番上のアイテムを選択している状態になってしまっていました。

そのため、DelaySetSelectState()のコルーチンで1フレームずらして選択ウィンドウのフラグを切り替えるようにしました。

もしかしたら私の環境では、以前はUpdate()内のスクリプトの処理順によって運よく回避されていて気づいていなかっただけかもしれません。すみません。

 

宿屋の効果音

宿屋の効果音はシーン内のイベントプロセスを使って再生します。この効果音が流れている間はBGMも停止するようにしておきます。

「Game」シーンにて、「Map_0001_Village」の中にある「NPC_Mother」でイベントプロセスを追加していきます。「EventPage1」の「Processes」にて、「Yes———-」の分岐内で以下のようにゲームオブジェクトを作成します。

ゲームオブジェクト名 概要 既存か新規作成か
ShowMessageYes 宿のメッセージ 既存
StopBGM BGMを停止する 新規
WaitBGM BGMの停止を待つ 新規
PlaySe 宿の効果音を再生する 新規
FadeOut 画面をフェードアウトする 既存
Refresh 全回復の処理を行う 既存
Wait 効果音の再生完了を待つ 既存
FadeIn 画面をフェードインする 既存
PlayBGM BGMを再開 新規
ShowMessageBye お見送りのメッセージ 既存
宿のイベントプロセスの作成
宿のイベントプロセスの作成

 

新しく作成したゲームオブジェクトについては以下のスクリプトをアタッチします。

ゲームオブジェクト名 スクリプト名 設定するフィールド名 設定値
StopBGM EventProcessStopBgm Fade Time 0.1
WaitBGM EventProcessWait Wait Time 0.1
PlaySe EventProcessPlaySe Se Name Inn
PlayBGM EventProcessPlayBgm Bgm Name Village
PlayBGM Is Resume True

 

また、既存の「Wait」では、宿の効果音の完了を待ちたいので、「Wait Time」の値を [3] に変更します。

続いてプロセス間のつながりを設定します。今回追加したイベントプロセスについて、以下のように次のイベントプロセスを設定します。

ゲームオブジェクト名 Next Process
ShowMessageYes StopBGM
StopBGM WaitBGM
WaitBGM PlaySe
PlaySe FadeOut
FadeIn PlayBGM
PlayBGM ShowMessageBye

 

設定を行なったらHierarchyウィンドウから「Map_0001_Village」のゲームオブジェクトを選択し、「Overrides」のプルダウンにて [Apply All] のボタンをクリックして変更を適用します。

 

宝箱の効果音

宝箱の効果音についてもイベントプロセスで実装します。「Map_0003_Dungeon」を選択し、「Events」の中にある「Event_TreasureItem」と「Event_TreasureGold」について効果音を再生するイベントプロセスを追加します。

まずは「Event_TreasureItem」から実装していきましょう。先ほど「NPC_Mother」で作成した効果音再生のイベントプロセスである「PlaySe」をコピーして、「Event_TreasureItem」の下にある「EventPage1」の「Processes」にて、「CheckGraphic」の次の要素としてペーストします。

宝箱の効果音の再生
宝箱の効果音の再生

 

「PlaySe」を選択してInspectorウィンドウから「Next Process」を「GetItem」に、「Se Name」を [Treasure] に設定します。また、「CheckGraphic」の「Next Process」を「PlaySe」に変更します。

効果音の設定
効果音の設定

 

同様に「Event_TreasureGold」についても実装していきましょう。「Event_TreasureItem」で作成した「PlaySe」をコピーして、「Event_TreasureGold」の下にある「CheckGraphic」の次の要素としてペーストします。

お金の宝箱の効果音の再生
お金の宝箱の効果音の再生

 

「PlaySe」を選択してInspectorウィンドウから「Next Process」を「GetGold」に設定します。また、「CheckGraphic」の「Next Process」を「PlaySe」に変更します。

効果音の設定
効果音の設定

 

設定を行なったらHierarchyウィンドウから「Map_0003_Dungeon」のゲームオブジェクトを選択し、「Overrides」のプルダウンにて [Apply All] のボタンをクリックして変更を適用します。

 

動作確認

シーンとスクリプトを保存したら動作を確認しましょう。

「Title」シーンを開いてゲームを実行して、

  • メッセージ送りの効果音
  • お店の効果音
  • 宿屋の効果音
  • 宝箱の効果音

の効果音が再生されることを確認します。宿屋や宝箱はイベントプロセスとして再生しているので、イベントプロセス間のつながりはよくご確認いただけると良いかもしれません。

イベント関連の効果音を確認
イベント関連の効果音を確認

 

もし効果音が再生されていない部分があれば、このページの目次と見比べて抜け漏れがないかご確認ください。私が忘れている部分があったらコメントでこっそり教えてください。

 

今回のブランチ

 

まとめ

今回はイベント関連の効果音を実装しました。コード内だけではなく、シーン内から再生を指定するケースもあるので、文字列で効果音を指定できると便利ですね。

次回はデバッグ作業を行いたいと思います。現時点で私の方で気付いているものを中心に修正していきます。

 

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!