現場レベルのゲーム制作が、すべてここで学べます。
この記事はUnityノンフィールドRPGの作り方講座の第10回です。
前回はScriptableObjectを使ってマスターデータの作成と戦闘シーンへのオブジェクトの配置を行いました。
前回の記事:

ですが、まだマスターデータの中身に基づいて敵キャラの画像が表示されているわけではありません。
第10回ではマスターデータに基づいて敵キャラを表示し、主人公や敵キャラのステータスウィンドウの情報を更新する処理、そしてスキル使用時の処理を実装していきます。
いよいよUnityとC#を用いてRPGの戦闘システムのメイン部分を構築です。
ですがその前にここで戦闘シーンに入ったときの音楽切り替え処理を設定しておきます。
バトルシーンで流す音楽を準備しよう
バトルシーンのBGM準備をします。
タイトルシーンやダンジョンシーンでのBGM処理と同じようにまずはAudioClipをアタッチするための変数を宣言します。そしてバトルシーンのBGMを再生するメソッドを追加していきます。
SoundManager.cs
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
using UnityEngine; public class SoundManager : MonoBehaviour { public static SoundManager Instance; private AudioSource audioSource; public AudioClip TitleBGM; public AudioClip DungeonBGM; public AudioClip BattleBGM; public AudioClip TouchSE; public AudioClip RecoverySE; private void Awake() { if (Instance == null) { Instance = this; audioSource = GetComponent<AudioSource>(); DontDestroyOnLoad(this); } else { Destroy(gameObject); } } // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { } // Update is called once per frame void Update() { } private void PlayBgm(AudioClip audioClip) { if (audioSource.clip == audioClip) return;// すでに再生されているBGMなら処理しない audioSource.clip = audioClip; audioSource.Play(); } public void PlayTitleBGM() { PlayBgm(TitleBGM); } public void PlayDungeonBGM() { PlayBgm(DungeonBGM); } public void PlayBattleBGM() { PlayBgm(BattleBGM); } public void PlayTouchSE() { audioSource.PlayOneShot(TouchSE); } public void PlayRecoverySE() { audioSource.PlayOneShot(RecoverySE); } } |
AudioClipをアタッチする
SoundManagerオブジェクトにAudioClipをアタッチするのですが、SoundManagerオブジェクトはタイトルシーンにあるため、一度[Assets]→[Scenes]にある[Title]をダブルクリックしてタイトルシーンに戻ります。
※ シーンの保存を忘れないようにしましょう
ではタイトルシーンのHierarchyビューにあるSoundManagerオブジェクトをクリックしてInspectorビューを表示します。
AssetStoreからインポートしたフォルダ[LUShvalleySound]→[LUShvalleySound_FantasyBGM_FreePackVol.01]→[LVSD-0006_03_annulus_loop]をドラッグアンドドロップします。

(↑この画面操作では最初にインスペクターのカギマークをクリックして画面固定を行ってからBGMデータをアタッチしています。終わったらカギマークを外しておきましょう)

まだこの段階ではバトル時のBGMは流れません。後ほどBattleDirector.csという戦闘管理用スクリプトを作成した際にSoundManagerのインスタンスに命令を送り再生処理を実装します。
GameManagerからEnemyDataを参照する
マスターデータであるEnemyDataをGameManagerから参照できるようにしておきます。
GameManager.cs
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
using UnityEngine; using UnityEngine.SceneManagement;// ここに追加 public enum SceneCode { Title, Dungeon, Battle, End, Start } public class GameManager : MonoBehaviour { public static GameManager Instance;// 静的な変数 public PlayRecord PlayRecord;// プレイデータ public EnemyData EnemyData;// 敵キャラデータ // Startメソッドより先に呼び出される private void Awake() { if (Instance == null) { Instance = this;// 実体化されたらいつでもアクセス可能 DontDestroyOnLoad(gameObject);// シーンをまたいでもオブジェクトは消えない PlayRecord = new PlayRecord();// プレイデータを作成しておく(仮) PlayRecord.InitStatus();// プレイデータの初期化 } else { Destroy(gameObject);// すでに存在していたら削除 } } // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { } // Update is called once per frame void Update() { } public static void LoadScene(SceneCode sceneCode) { SceneManager.LoadScene(sceneCode.ToString()); } } |
EnemyDataをアタッチする
タイトルシーンのHierarchyビューにあるGameManagerオブジェクトをクリックしてInspectorビューを表示します。


アタッチが終わったら[Assets/Scenes/Battle]をクリックして再びバトルシーンを開いておきましょう。
※ シーンの保存を忘れないようにしましょう
戦闘システムの処理を行うC#スクリプトとオブジェクトを構築
バトルシーン全体の処理を行うDirectorスクリプトを作成し、このスクリプトをアタッチするためのオブジェクトを作成します。


Hierarchyビューを右クリックして、[Create Empty]をクリックして空のオブジェクトを作成します。オブジェクトの名前は「Director」とします。

HierarchyビューにあるDirectorオブジェクトを選択してInspectorビューを表示します。

一番下にある[Add Component]をクリックし、検索バーに”Battle”と入力します(”BattleDirector”まで入力しても可)。一覧から「Battle Director」をクリックしてアタッチします。
戦闘システムを管理するC#スクリプトBattleDirector.csを実装する
BattleDirectorクラスはバトルシーンを管理するクラスです。
ダンジョン探索シーンと同じくもしこのシーンから再生されてもタイトル画面から始まるようにしています。シングルトンを用いた初期化をタイトル画面で行うためです。
Updateメソッドを使用する予定がないためコメントアウトしておきます。削除しても良いのですが、今後演出などで使用する可能性があるので念のためコメントアウトしておきます。
BattleDirector.cs
以下の処理で構成されたBattleDirector.csを作成します。
まとめ

ここまででバトルシーンでの敵キャラの表示とUIの表示を実装しました。
次回からバトルシーンでスキルコマンドをタッチして主人公が行動する処理や敵キャラ行動、ターン進行を実装していきます。
次の記事:

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






コメント