【Unity】RPGを作るチュートリアルその118 イベント関連の効果音を実装
- 2025.08.17
- RPGチュートリアル
- RPG, Unity, ゲーム開発, チュートリアル

シンプルな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」シーンを開いてゲームを実行して、
- メッセージ送りの効果音
- お店の効果音
- 宿屋の効果音
- 宝箱の効果音
の効果音が再生されることを確認します。宿屋や宝箱はイベントプロセスとして再生しているので、イベントプロセス間のつながりはよくご確認いただけると良いかもしれません。

もし効果音が再生されていない部分があれば、このページの目次と見比べて抜け漏れがないかご確認ください。私が忘れている部分があったらコメントでこっそり教えてください。
今回のブランチ
まとめ
今回はイベント関連の効果音を実装しました。コード内だけではなく、シーン内から再生を指定するケースもあるので、文字列で効果音を指定できると便利ですね。
次回はデバッグ作業を行いたいと思います。現時点で私の方で気付いているものを中心に修正していきます。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】RPGを作るチュートリアルその117 タイトル画面とメニュー画面の効果音を実装 2025.08.16
-
次の記事
記事がありません
コメントを書く