// 적을 생성합니다.
    private void SpawnEnemy(StageWaveInfo stageInfo, List <EnemyCharacter> spawnedEnemies)
    {
        // 원 가장자리 위치를 반환합니다.
        Vector3 GetRandomSpawnPosition() =>
        new Vector3(Random.Range(-1.0f, 1.0f), 0.0f, Random.Range(-1.0f, 1.0f)).normalized *_StageRadius;

        // 적을 특정한 위치에 생성합니다.
        EnemyCharacter SpawnEnemy(EnemyType enemyType)
        {
            var newEnemyCharacter = Instantiate(_EnemyPrefabs[enemyType]);

            newEnemyCharacter.transform.position = GetRandomSpawnPosition();

            spawnedEnemies.Add(newEnemyCharacter);

            newEnemyCharacter.onEnemyCharacterDie +=
                () => spawnedEnemies.Remove(newEnemyCharacter);


            return(newEnemyCharacter);
        }

        for (int i = 0; i < stageInfo.enemyType1; ++i)
        {
            SpawnEnemy(EnemyType.Enemy1);
        }
        for (int i = 0; i < stageInfo.enemyType2; ++i)
        {
            SpawnEnemy(EnemyType.Enemy2);
        }
        for (int i = 0; i < stageInfo.enemyType3; ++i)
        {
            SpawnEnemy(EnemyType.Enemy3);
        }
    }
        public override void Modify(ref StageClassInfo info)
        {
            int           index     = UnityEngine.Random.Range(0, info.waveList.Count);
            StageWaveInfo reinforce = info.waveList[index];

            info.waveList.Insert(index, Harmony_Patch.CopyXml(reinforce));
        }
        public static StageWaveInfo CopyXml(StageWaveInfo info)
        {
            StageWaveInfo output = new StageWaveInfo
            {
                enemyUnitIdList = new List <int>(),
                formationId     = info.formationId,
                formationType   = info.formationType,
                availableNumber = info.availableNumber,
                aggroScript     = info.aggroScript,
                managerScript   = info.managerScript
            };

            output.enemyUnitIdList.AddRange(info.enemyUnitIdList);
            return(output);
        }