【Unity】RPGを作るチュートリアルその105 ボスに関するイベントを実装
- 2025.07.12
- RPGチュートリアル
- RPG, Unity, ゲーム開発, チュートリアル

シンプルなRPGをUnityで作るチュートリアルシリーズの105回目です。
第104回ではゲーム内で使用するイベントの実装として、各マップを繋ぐマップ移動のイベントを実装しました。
今回はボスゴブリンの会話と戦闘のイベントを実装していきたいと思います。
制作環境
MacBook Pro 2023 Apple M2 Max
Unity6 (6000.0.30f1) Silicon
作業内容と順序
シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。
チュートリアルの一覧
このシリーズ全体の一覧は以下のページにまとめています。
前回の内容
前回はゲーム内で使用するイベントの実装として、各マップを繋ぐマップ移動のイベントを実装しました。
各マップのイベントを実装
イベント機能について、コードの部分はある程度作成できたので、各マップで実際にイベントを組んでいきましょう。といっても村のイベントについてはイベントプロセスを実装する際にある程度作ってあるので、
- 各マップをつなぐマップ移動のイベント
- ボスゴブリンの会話と戦闘のイベント
- エンディングのイベント
を実装すれば、当初想定していたイベントとしては実装が完了します。前回は一番上のマップ移動のイベントを実装したので、今回はボスゴブリンの会話と戦闘のイベントの部分を作成してきます。
ボスゴブリンの会話と戦闘のイベントの作成
戦闘機能を呼び出すイベントプロセスについては既に作成してあるので、ゴブリンのゲームオブジェクトをダンジョンに配置して、会話イベントなども実装していきたいと思います。
また、ダンジョンに関する部分でいうと、宝箱も配置したいと考えています。この宝箱についても既に作成済みなので、村からダンジョンに移動させればOKな状態になっています。宝箱の中身となるアイテムの種類やゴールドの量などはちょっと調整していきます。
簡単に終わりそうな宝箱の部分について先にやってしまいましょう。
宝箱イベントの移動
機能の確認のため、村のマップである「Map_0001_Village」にて、宝箱のイベントを2つ作成してあります。これらのゲームオブジェクトを「Map_0003_Dungeon」の「Events」の下に移動させましょう。シーン内からドラッグ&ドロップしようとするとPrefabを跨ぐことになってダイアログが出るので、コピーしてからペーストする形で移動させます。ペースト後、「Map_0001_Village」の方の宝箱は削除しておきましょう。

移動した宝箱をダンジョン内に配置します。私は「Event_TreasureItem」の「Transform」にて「X」を [12.5] に、「Y」を [15.5] に設定しました。もう一方の「Event_TreasureGold」の「Transform」にて「X」を [-1.5] に、「Y」を [0.5] に設定しました。入り口側の宝箱にゴールドを入れて引き返しやすくして、奥の宝箱にはアイテムを入れておきます。
宝箱の中身も少し調整しておきましょう。「Event_TreasureGold」にある「GetGold」のイベントプロセスでは、「Gold Amount」の値を [50] に変更しました。上位武器のロングソードがちょうど買えるくらいの量にしています。

「Event_TreasureItem」の方は、今のところ薬草が3つ手に入るようにしていますが、こちらはこのままにしておきましょう。ダンジョン内で店売りの武器や防具が手に入ると若干悲しい気持ちになるので、それなら消費アイテムの方が嬉しいかもしれない、という考えです。この辺りは開発者としての考え方によって変えていくのは全然アリだと思います。
ボスゴブリンのイベント
宝箱を移動させたのと同じような手順で、「NPC_Goblin」のゲームオブジェクトを「Map_0001_Village」から「Map_0003_Dungeon」に移動させます。

「NPC_Goblin」はダンジョンの奥に配置されるように「Transform」の「Position」の「X」を [16.5] に、「Y」を [15.5] に設定します。

ボスとしてどっしりと構えていてもらうため、「NpcMover」の「Move Frequency」の値を [Never] に変更します。

ダンジョンでボスゴブリンに話しかけた時には、以下のような流れでイベントを進めたいと思います。
- 会話イベント(例: 「よく来たゴブ!」)
- 戦闘の呼び出し
- 負けたら村長の前に戻す
- 勝ったら勝利フラグを立てて、会話後に村長の前に戻す
勝利フラグをtrueにして村に戻った場合、エンディングの自動イベントを開始する予定でいます。この部分は次回作成しましょう。
まずは必要なゲームオブジェクトとして以下のように作成します。区切り用のゲームオブジェクトなど、動作確認時に作成してそのまま使えそうなものは流用しましょう。「Post———–」の区切り以降は勝ち負け共通して通る処理にしています。どちらも村長の前に戻る処理を行い、村側のイベントでフラグの違いによって処理を分けます。
ゲームオブジェクト名 | アタッチするスクリプト |
ShowMessage | EventProcessMessage |
StartBattle | EventProcessBattle |
Win———– | なし |
ShowMessageWin | EventProcessMessage |
SetFlagWin | EventProcessFlag |
ChangeGraphic | EventProcessCheckGraphic |
Wait | EventProcessWait |
ShowMessageWin2 | EventProcessMessage |
Lose———– | なし |
SetFlag | EventProcessFlag |
Post———– | なし |
FadeOut | EventProcessFadeOut |
Wait | EventProcessWait |
Move | EventProcessMove |
ChangeDirection | EventProcessChangePlayerDirection |
FadeIn | EventProcessFadeIn |

また、ボスゴブリンを倒した後にグラフィックを透明にしたいので、対応するイベントページも作成します。作成してある「EventPage」を複製して、元々ある方を [EventPage1] に、複製した方を [EventPage2] にリネームします。「EventPage2」の方は特に処理を行わないのでイベントプロセスを削除しておきましょう。

イベントプロセスのつながりは以下のように設定します。
ゲームオブジェクト名 | フィールド名 | アサインするプロセス |
EventPage1 | Start Process | ShowMessage |
ShowMessage | Next Process | StartBattle |
StartBattle | Next Process | ShowMessageWin |
StartBattle | Lose Process | SetFlag |
ShowMessageWin | Next Process | SetFlagWin |
SetFlagWin | Next Process | ChangeGraphic |
ChangeGraphic | Next Process | Wait ※勝った場合の処理の方 |
Wait | Next Process | ShowMessageWin2 |
ShowMessageWin2 | Next Process | FadeOut |
SetFlag | Next Process | FadeOut |
FadeOut | Next Process | Wait |
Wait | Next Process | Move |
Move | Next Process | ChangeDirection |
ChangeDirection | Next Process | FadeIn |
FadeIn | Next Process | なし |
また、設定変更が必要なイベントプロセスでは以下のように設定しました。デフォルト値を使う場合は表に入れていません。
ゲームオブジェクト名 | フィールド名 | 設定値 |
ShowMessage | Messages/要素0 | <ボスゴブリン> ニンゲン、こんなところまでご苦労なこったゴブ。 |
ShowMessage | Messages/要素1 | <ボスゴブリン> 我々ゴブリン族はこの洞窟を拠点にして、 魔王様の支配領域を広げるんだゴブ! |
ShowMessage | Messages/要素2 | <ボスゴブリン> 手始めに近くの村を襲って、開戦の狼煙を上げてやるゴブ! |
ShowMessage | Messages/要素3 | <ボスゴブリン> ここに来たということは、お前はその村のニンゲンゴブね? このボスゴブリン様がボコボコにしてやるゴブ! |
StartBattle | Enemy Id | 3 |
ShowMessageWin | Messages/要素0 | <ボスゴブリン> まさかニンゲンに負けるとは……。 |
ShowMessageWin | Messages/要素1 | <ボスゴブリン> 魔王様、申し訳ありませんゴブ…… ぐふっ! |
SetFlagWin | Flag Name | DungeonBossWin |
SetFlagWin | Flag State | True |
ShowMessageWin2 | Messages/要素0 | <アレン> よし、帰ろう! |
SetFlag | Flag Name | BattleLose |
SetFlag | Flag State | True |
Move | Target Map Id | 1 |
Move | Target Position | X: 7, Y: 11 |
ChangeDirection | Target Direction | Back |
条件の設定
「EventPage2」ではフラグがTrueの時のグラフィックを表示したいので、「Conditions」の下にある「EventPageConditionFlag」にて、「FlagName」を [DungeonBossWin] に、「State」を [true] にします。

「EventPage2」では、条件として先ほど設定した「EventPageConditionFlag」をアサインし、「Event Trigger」では [None] を選択します。「EventPage2」の方はグラフィックの切り替えのために使うため、実際の処理は行わないようにします。「Start Process」もNullのままでOKです。

「EventPage1」では、条件はなしで、「Event Trigger」では [Confirm Button] を選択します。

グラフィックの設定
続いてグラフィックの設定を行います。既存の「EventGraphicRecord」を複製して合計2つにした後、それぞれ名前を [EventGraphicRecordVisible] と [EventGraphicRecordInvisible] にリネームします。

「EventGraphicRecordVisible」では画像を表示するときの設定を行います。「Event Pages」のリストでは、対応するイベントページとして「EventPage1」をアサインします。「Sprite」では正面を向いている画像の [npc_mock_enemy_1] 、「Animator Controller」では [NPC_Goblin] のアニメーションコントローラをそれぞれアサインします。

「EventGraphicRecordInvisible」では画像を表示しないときの設定を行います。「Event Pages」のリストでは、対応するイベントページとして「EventPage2」をアサインします。「Sprite」では透明な画像の [event_indicator_transparent] をアサインします。「Is Stop Animator」のチェックも入れておきます。アニメーターを止めることで、アニメーター側による画像の切り替えを防いでいます。

「EventGraphicController」では画像の設定をアサインしていきます。「Event Graphic Records」には上で設定したレコード2つをアサインします。「Sprite Renderer」と「Animator」ではそれぞれ「NPC_Goblin」のゲームオブジェクトにアタッチしてあるものをアサインします。Hierarchyウィンドウから「NPC_Goblin」をドラッグ&ドロップすると便利です。

ここまでの設定が終わったら、「Map_0001_Village」と「Map_0003_Dungeon」のそれぞれで、「Overrides」のプルダウンから [Apply All] をクリックしてPrefabに変更を適用します。
動作確認
ボスゴブリンのイベントの動作を確認してみましょう。確認前に、「Map_0001_Village」、「Map_0002_Field」、「Map_0003_Dungeon」を非表示にしておきます。
ゲームを開始して、ダンジョンの奥まで進み、ボスゴブリンの前でセーブしておきましょう。セーブはメニュー画面から行います。ロードする際は、「SaveTester」からセーブ枠のIDを指定してロードします。
ボスゴブリンに向かって決定ボタンを押して、
- ボスゴブリンとの会話イベント後、戦闘が始まること
- 戦闘に勝った場合は会話イベントに進むこと
- 会話イベント後にゴブリンの画像が消えること
- その後村に移動すること
- 戦闘に負けた場合はそのまま村に戻り、負けた時のイベントが始まること
を確認します。

戦闘に関して確認していたところ、
- ボスからも逃げられる
- 逃げると勝利扱いになる
- 一度戦闘に負けた後、再度戦うとHPが残っていても負けになる
といった点が出てきたため、次回修正したいと思います。上2つについては、イベントプロセス側から逃走できるかどうかのフラグをセットできるようにします。3つ目については、全回復時に敗北フラグをfalseにする処理が入っていない可能性があるため、その部分を修正します。
今回のブランチ
まとめ
今回はボスゴブリンの会話と戦闘のイベントを実装しました。イベント関連は細かい作業が多くなるため、イベントプロセス間のつながりなどはよく確認しておくと良いかもしれません。
次回は戦闘関連で気になった部分を修正していきます。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】RPGを作るチュートリアルその104 各マップの移動イベントを実装 2025.07.10
-
次の記事
記事がありません
コメントを書く