ふりかえり
前回は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 を使って複数のモンスターを定義しました!
画像、ステータス、報酬を個別に管理できるので、
今後のゲームバランス調整やモンスター追加がとても楽になります!
次回予告
次回は、今回作成したモンスターたちを
実際にゲーム画面に登場させていきます!
お楽しみに!




コメント