ふりかえり
前回はHPバーを実装し、バトル中の緊張感と視覚的な分かりやすさがアップしました!
モンスターを追加!
今まではスライム1体だけだったので、戦闘がどうしても単調になってしまっていました。
今回は複数のモンスターを追加して、バトルのバリエーションを広げていきます!
スクリプトの変更
モンスターのデータ管理にScriptableObjectを使用!
新たに EnemySO.cs を作成し、以下の情報をひとまとめに管理します:
- 名前 / 画像 / スケール
- 基本ステータス(HP・攻撃・防御)
- 撃破時の報酬(経験値・ゴールド)
これにより、モンスターの追加や調整がとても簡単になります!
using UnityEngine; [CreateAssetMenu(fileName = "NewEnemy", menuName = "RPG/Create Enemy")] public class EnemySO : ScriptableObject { [Header("基本情報")] public string enemyName; public Sprite enemySprite; public Vector2 imageScale = Vector2.one; [Header("基本ステータス")] public int baseMaxHP = 50; public int baseAttack = 8; public int baseDefense = 2; [Header("基本報酬")] public int baseExpReward = 10; public int baseGoldReward = 5; }
EnemyManager.csで複数のモンスターに対応
- availableEnemies に複数の EnemySO をリストで登録
- ステージが進むごとに、モンスターのレベルも自動で上昇
また、敵画像のスプライトやスケールも自動反映されるようになっています。
[Header("登場させる敵のリスト")] public List<EnemySO> availableEnemies; private EnemySO currentEnemyType; //既存のスクリプト public void SetupNewEnemyForStage(int stageLevel) { if (availableEnemies == null || availableEnemies.Count == 0) { Debug.LogError("利用可能な敵が設定されていません!"); return; } currentEnemyType = availableEnemies[Random.Range(0, availableEnemies.Count)]; enemy = new EnemyData { name = currentEnemyType.enemyName, level = 1, maxHP = currentEnemyType.baseMaxHP, currentHP = currentEnemyType.baseMaxHP, attack = currentEnemyType.baseAttack, defense = currentEnemyType.baseDefense, expReward = currentEnemyType.baseExpReward, goldReward = currentEnemyType.baseGoldReward }; isEnemyDead = false; if (enemyUIManager != null) { Debug.Log($"<color=cyan>EnemyUIManagerにスプライト '{currentEnemyType.enemySprite?.name}' の更新を依頼します。</color>"); enemyUIManager.UpdateEnemySprite(currentEnemyType.enemySprite); // 新しくスケール設定の処理を追加 enemyUIManager.SetEnemyImageScale(currentEnemyType.imageScale); } for (int i = 1; i < stageLevel; i++) { LevelUpEnemy(); } SaveEnemyStats(); if (enemyUIManager != null) { enemyUIManager.InitializeHPBar(); enemyUIManager.ForceUpdateHPBar(); } Debug.Log($"ステージ{stageLevel}: {enemy.name}(Lv.{enemy.level}) が出現!"); }
Unityでの設定
1. Assets/Prefab/Enemy/ フォルダを作成

2. Project ビューで右クリック → Create > RPG > Create Enemy を選択

3. 作成された ScriptableObject に 画像やステータスを入力(名前、HP、攻撃力など)

複数のモンスターを作成したら、
EnemyManager の availableEnemies にそれらを登録します。

今はまだ「データ」のみ!
今回のステップでは、敵のデータ構造の整備を行いました。
実際にゲーム画面に表示する準備は完了です!
まとめ
今回は ScriptableObject を使って複数のモンスターを定義しました!
画像、ステータス、報酬を個別に管理できるので、
今後のゲームバランス調整やモンスター追加がとても楽になります!
次回予告
次回は、今回作成したモンスターたちを
実際にゲーム画面に登場させていきます!
お楽しみに!
コメント