ふりかえり
前回は ScriptableObject を使って、複数のモンスターを定義できるようになりました!
前回の投稿はこちら↓
いろんなモンスターとバトルできるようにする
これまでの敵はスライム1体だけ。
今回は、前回作成した複数のモンスターを実際にバトルに登場させる仕組みを実装します!
スクリプトの変更
▶ EnemyManager.cs
- 登場させるモンスターを List<EnemySO> で管理
- ステージ開始時や敵が倒された後に、ランダムな敵を出現
- 敵の画像(Sprite)とスケール(大きさ)も EnemySO から設定
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}) が出現!");
}
//既存のスクリプト
private void SpawnNewRandomEnemy()
{
// 現在のステージレベルを取得して、新しい敵をセットアップする
int currentStage = (battleManager != null) ? battleManager.GetCurrentStage() : 1;
SetupNewEnemyForStage(currentStage);
// 復活アニメーションを再生
if (animationManager != null)
{
// 新しい敵のImageをフェードインさせる
animationManager.EnemyReviveAnimation();
}
}
▶ EnemyUIManager.cs
- 敵の画像を切り替える UpdateEnemySprite()
- スプライトの大きさを変更する SetEnemyImageScale() を追加
// 敵の画像を設定する
public void UpdateEnemySprite(Sprite newSprite)
{
if (enemyImage != null)
{
enemyImage.sprite = newSprite;
}
}
// 敵の画像のスケールを設定する
public void SetEnemyImageScale(Vector2 scale)
{
if (enemyImage != null)
{
enemyImage.rectTransform.localScale = new Vector3(scale.x, scale.y, 1f);
Debug.Log($"<color=cyan>敵画像のスケールを ({scale.x}, {scale.y}) に変更しました。</color>");
}
}
Unityでの設定
- EnemyManager の availableEnemies に EnemySO を複数登録 (例:スライム、ゴブリン、モンキーなど)
- 敵画像を表示する Image UI を用意 → これを EnemyUIManager にアタッチ
- ゲーム開始時に 画像・名前・ステータスが反映されるように設定


確認
ゲームを開始すると最初のモンスターはサルが出てきました。倒すと次はゴブリンが出てきました。というように作成した敵がランダムに出現するようになりました!
ゲームをスタートすると…
- 1体目は「サル」
- 倒すと次は「ゴブリン」
- さらに倒すと「スライム」…


というように、作成したモンスターがランダムに登場するようになりました!
まとめ
今回は、スライム以外のモンスターとバトルできるようにしました!
モンスターごとに見た目や強さが異なることで、バトルがより魅力的になりました!
次回予告
次回はついに「ボスモンスター」を実装します!
お楽しみに!



