ふりかえり
前回は 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体目は「サル」
- 倒すと次は「ゴブリン」
- さらに倒すと「スライム」…


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