using UnityEngine; using UnityEditor; using IndianOceanAssets.Engine2_5D; /// /// 编辑器工具:在场景中批量创建敌人实例。 /// 每个敌人使用对应的新预制体(enemy_01~05),保留各自的外观和参数。 /// 菜单路径:Assets > 创建5个敌人 (enemy_01~05) /// public static class EnemyBatchCreator { [MenuItem("Assets/创建5个敌人 (enemy_01~05)")] public static void Create() { // 5个新预制体路径(对应各自的外观) string[] prefabPaths = { "Assets/enemy/Prefabs/enemy_01.prefab", "Assets/enemy/Prefabs/enemy_02.prefab", "Assets/enemy/Prefabs/enemy_03.prefab", "Assets/enemy/Prefabs/enemy_04.prefab", "Assets/enemy/Prefabs/enemy_05.prefab", }; string[] names = { "enemy_01", "enemy_02", "enemy_03", "enemy_04", "enemy_05" }; // 查找当前场景中的玩家位置,围绕玩家分布敌人 var player = GameObject.FindWithTag("Player"); Vector3 center = player != null ? player.transform.position : Vector3.zero; // 5个敌人的偏移位置(围绕玩家分布) Vector3[] offsets = new Vector3[] { new Vector3(5f, 0f, 3f), new Vector3(-5f, 0f, 3f), new Vector3(5f, 0f, -3f), new Vector3(-5f, 0f, -3f), new Vector3(0f, 0f, 6f), }; Undo.SetCurrentGroupName("创建5个敌人"); int created = 0; for (int i = 0; i < 5; i++) { var prefab = AssetDatabase.LoadAssetAtPath(prefabPaths[i]); if (prefab == null) { Debug.LogWarning($"[EnemyBatchCreator] 找不到预制体: {prefabPaths[i]},跳过"); continue; } // 实例化对应的 Prefab 到场景中 GameObject enemy = (GameObject)PrefabUtility.InstantiatePrefab(prefab); enemy.name = names[i]; enemy.transform.position = center + offsets[i]; // 注册 Undo Undo.RegisterCreatedObjectUndo(enemy, $"创建 {names[i]}"); created++; } // 选中刚创建的敌人 var all = new GameObject[created]; int idx = 0; for (int i = 0; i < 5; i++) { var go = GameObject.Find(names[i]); if (go != null) all[idx++] = go; } Selection.objects = all; Debug.Log($"[EnemyBatchCreator] 已创建 {created} 个敌人: enemy_01 ~ enemy_05,使用各自对应的新预制体"); } }