ノンフィールドRPGの作り方講座11 ターン制戦闘システムを構築する/効果音の実装 | Unity入門の森 ゲームの作り方

ノンフィールドRPGの作り方講座11 ターン制戦闘システムを構築する/効果音の実装

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

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

【永久会員チケット】

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

全講座を見放題で学ぶ

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

この記事はノンフィールドRPGの作り方講座の第11回です。

前回はバトルシーンでの敵キャラの表示やステータスウィンドウの表示を実装、そしてスキル使用時の処理を実装しました。

前回の記事:

UnityノンフィールドRPGの作り方10 C#で戦闘システムを作ろう ~BGM切り替え/ステータス更新処理/スキル処理を開発~
この記事はUnityノンフィールドRPGの作り方講座の第10回です。前回はScriptableObjectを使ってマスターデータの作成と戦闘シーンへのオブジェクトの配置を行いました。前回の記事:ですが、まだマスターデータの中身に基づいて敵キ...

第11回ではスキルボタンをタッチして主人公ターンと敵キャラターンの進行の実装およびバトル中の効果音の準備を行っていきます。

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

スキルボタンオブジェクトにButtonコンポーネントを追加する

3つのスキルボタンに[Button]コンポーネントを追加します。

HierarchyビューにあるButton1オブジェクトをクリックし、Shiftキーを押しながらButton3までオブジェクトをクリックして、3つのButtonオブジェクトをまとめて選択します。

Inspectorビューを表示し、下にあるAdd Comopnentをクリックして、検索バーに[Button]と入力します。一覧に表示されたButtonコンポーネントをクリックして追加します。

On Click()のイベントリスナーの設定は後ほど行います。

バトルシステムを作り上げる スキル使用時の処理とターン進行処理を実装

このゲームではターン制戦闘システムを採用しており、プレイヤー側は攻撃、防御、回復の3つの行動を選択できます。回復スキルは使用した後も行動できるシステムにします。

ですが、毎ターン回復できるわけではなく、一度回復スキルを使うと数ターンのスキル使用ができない設定にします。こうした行動制限を加えることでいつ回復スキルを発動させるかの選択をプレイヤーに迫り、シンプルな構造ながらも戦略性が生まれます。

この回復スキルの制限ターン数とターン切り替えの待ち時間をまず定数クラスに追加します。

GameConstants.cs

バトルシステムをコントロールしているのは前回作成したBattleDirector.csです。

ここからは戦闘システムがちゃんと動くように処理を実装していきます。

BattleDirector.cs

まず、スキルボタンオブジェクトをアタッチするための変数と、スキルボタンにスキルの威力を表示するためのテキストオブジェクトをアタッチするための変数をこのスクリプトに追加します(威力を表示するのは攻撃スキルと回復スキルだけ)。

次に、スキルの効果を発動させるためのメソッドUseSkillを追加します。UseSkillメソッドは引数に、スキルの使用者、スキルの対象者、スキルコード(文字列)、スキル使用後の処理を引数として渡すようにしています。スキルコードによって条件が分岐しスキルの効果を発動するようにします。

また、主人公のターンと敵キャラのターンが回ってきたときのメソッドを追加し、スキルボタンをタッチしたときにスキル効果を発動する処理も追加します。

 

現在BattleDirectorは戦闘の進行管理、UIの表示制御、効果音トリガーの設定の3つの役割を持っています。ダメージ計算やパラメータの数値処理はUnitStatus側で行います。

↑今回このメソッドの第4引数はUnityAction型(C#ではデリゲートと呼ばれる)で定義されていて、これによりメソッドを引数としてUseSkillに渡して処理を行わせることができます。

ここでは回復スキルの後の処理をnullにし、攻撃と防御スキルの後の処理をTurnEnemyにすることで回復スキルの後は連続行動を可能にしています。

デリゲートとイベントとUnityActionの使い方について詳しく知りたい方はこちら>>

UnityC# デリゲートとイベントとUnityActionの使い方
今回の記事ではデリゲートとイベントについて解説していきます。前回は辞書の使い方について解説しましたね。デリゲートとイベントを使うことでメソッドを値として使用することができます。メソッドを値にして利点があるのかと思われますが、アプリでできるこ...

また、ここではUseSkill内のコルーチンは「時間経過をまたいで処理を進める」ために使われています(yield return new WaitForSeconds(GameConstants.TurnSpeed)の部分)。

戦闘シーンでは攻撃や防御の演出時間を確保しつつ、その後にダメージ適用やターン遷移を行いたい場合があります。

yield return new WaitForSeconds() を使えば、ゲーム全体を止めずに「間」を演出できます。

このようにコルーチンを使うと、非同期処理をスクリプト内で手順通りに自然な形で記述できます。

これでバトルシーンのターン制の流れができました。

スキルボタンをスクリプトにアタッチする

BattleDirectorにスキルボタンを表示・非表示できるようにアタッチしておきます。またスキルの威力を表示するためにText(TMP)オブジェクトもアタッチしておきます。

なお、防御スキルは敵の攻撃を無効にするという内容なので、威力を表示しないようにしています。

スキルボタンにイベントリスナーを追加してメソッドを設定する

スキルボタンをタッチしたときに攻撃、防御、回復のスキルが発動するようにします。

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

まとめ

ここまででバトルシーンでの主人公と敵キャラのターンの流れ、そしてバトル中のオーディオの準備を実装しました。

次回からは攻撃時や被ダメージ時の演出、バトル勝利・敗北時の処理、さらに勝利時のレベルアップ処理を実装していきます。

次の記事:

Unity ノンフィールドRPGの作り方講座12 ターン制バトルでの演出強化・勝敗判定・レベルアップ処理の実装
この記事はUnityとC#でノンフィールドRPGを作る講座の第12回です。前回はバトルシーンでの主人公ターンと敵キャラターンの進行およびバトル中のオーディオの準備を実装しました。前回の記事:第12回では攻撃時や被ダメ時(被ダメは被ダメージの...

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

 

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

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

【永久会員チケット】

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

全講座を見放題で学ぶ

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

コメント

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