根据提供的code differences信息,由于没有具体的代码变更内容,我将生成一个通用的commit message模板:
``` docs(readme): 更新文档说明 - 添加项目使用指南 - 完善API接口说明 - 修正错误的配置示例 ``` 注意:由于您提供的code differences部分为空,以上是一个示例模板。当您有具体的代码变更时,请提供详细的变更内容以便生成更准确的commit message。
This commit is contained in:
1 parent
8d58c2223c
commit
11f1af357d
191 files changed
+2315
-1539
No files matched your search
@@ -0,0 +1,124 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class LevelWaveManager : MonoBehaviour
|
||||
{
|
||||
[Header("关卡配置")]
|
||||
public TextAsset levelConfigJson;
|
||||
|
||||
[Header("资源引用")]
|
||||
public Transform playerTransform;
|
||||
|
||||
private LevelConfig levelConfig;
|
||||
private List<GameObject> waveSpawners = new List<GameObject>();
|
||||
private Dictionary<string, CharacterData> characterDataCache = new Dictionary<string, CharacterData>();
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (playerTransform == null)
|
||||
{
|
||||
var mainChar = FindObjectOfType<MainCharacterCombat>();
|
||||
if (mainChar != null)
|
||||
{
|
||||
playerTransform = mainChar.transform;
|
||||
}
|
||||
}
|
||||
|
||||
if (levelConfigJson != null)
|
||||
{
|
||||
LoadLevelConfig();
|
||||
CreateWaveSpawners();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("LevelWaveManager: 未配置关卡 JSON 文件!");
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadLevelConfig()
|
||||
{
|
||||
try
|
||||
{
|
||||
levelConfig = JsonUtility.FromJson<LevelConfig>(levelConfigJson.text);
|
||||
Debug.Log($"加载关卡配置:{levelConfig.levelName},共 {levelConfig.waves.Length} 波");
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
Debug.LogError($"解析关卡配置失败:{e.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateWaveSpawners()
|
||||
{
|
||||
if (levelConfig == null || levelConfig.waves == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var waveConfig in levelConfig.waves)
|
||||
{
|
||||
GameObject spawnerObj = new GameObject($"WaveSpawner_Wave{waveConfig.waveIndex}");
|
||||
spawnerObj.transform.SetParent(transform);
|
||||
spawnerObj.transform.position = new Vector3(0, 0, waveConfig.triggerZPosition + 5f); // 生成点在触发点后方5米
|
||||
|
||||
WaveSpawner spawner = spawnerObj.AddComponent<WaveSpawner>();
|
||||
spawner.triggerZPosition = waveConfig.triggerZPosition;
|
||||
spawner.autoStart = false;
|
||||
|
||||
// 构建 WaveSpawner.Wave 数据
|
||||
WaveSpawner.Wave wave = new WaveSpawner.Wave();
|
||||
wave.waveName = $"第{waveConfig.waveIndex}波";
|
||||
|
||||
List<GameObject> enemyPrefabs = new List<GameObject>();
|
||||
List<Vector3> spawnPositions = new List<Vector3>();
|
||||
|
||||
foreach (var enemyConfig in waveConfig.enemies)
|
||||
{
|
||||
CharacterData characterData = LoadCharacterData(enemyConfig.characterDataId);
|
||||
if (characterData == null)
|
||||
{
|
||||
Debug.LogError($"找不到角色数据:{enemyConfig.characterDataId}");
|
||||
continue;
|
||||
}
|
||||
|
||||
// 根据配置生成多个敌人
|
||||
for (int i = 0; i < enemyConfig.count; i++)
|
||||
{
|
||||
enemyPrefabs.Add(characterData.unitPrefab);
|
||||
|
||||
Vector3 spawnPos = (i < enemyConfig.spawnPositions.Length)
|
||||
? enemyConfig.spawnPositions[i]
|
||||
: new Vector3(i * 2f, 0, 0); // 默认横向排列
|
||||
|
||||
spawnPositions.Add(spawnPos);
|
||||
}
|
||||
}
|
||||
|
||||
wave.enemyPrefabs = enemyPrefabs.ToArray();
|
||||
wave.spawnPositions = spawnPositions.ToArray();
|
||||
wave.spawnDelay = 0.5f;
|
||||
|
||||
spawner.waves = new WaveSpawner.Wave[] { wave };
|
||||
|
||||
waveSpawners.Add(spawnerObj);
|
||||
|
||||
Debug.Log($"创建 WaveSpawner:波次{waveConfig.waveIndex},触发位置 Z={waveConfig.triggerZPosition},敌人数量={enemyPrefabs.Count}");
|
||||
}
|
||||
}
|
||||
|
||||
private CharacterData LoadCharacterData(string characterDataId)
|
||||
{
|
||||
if (characterDataCache.ContainsKey(characterDataId))
|
||||
{
|
||||
return characterDataCache[characterDataId];
|
||||
}
|
||||
|
||||
CharacterData data = Resources.Load<CharacterData>($"Data/{characterDataId}");
|
||||
if (data != null)
|
||||
{
|
||||
characterDataCache[characterDataId] = data;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user