1. **StackOverflowException** возникает из-за рекурсивного вызова метода `PlayerSound()` внутри самого себя. Это приводит к бесконечному циклу вызовов, что в конечном итоге переполняет стек.
2. **Громкость звука**: значение громкости `volume` установлено в 1f, что является максимальным значением для громкости в Unity. Если звук слишком громкий, то его нужно уменьшить.
Вот исправленный код с учетом этих замечаний:
using UnityEngine;
public class MusicForMainMenu : MonoBehaviour
{
private int numberOfMusic;
private float volume = 0.5f; // Установите более низкую громкость
public AudioClip[] music;
private AudioSource audioSource;
private void Start()
{
audioSource = GetComponent<AudioSource>();
PlayerSound();
}
private void PlayerSound()
{
numberOfMusic = Random.Range(0, music.Length); // Убедитесь, что диапазон соответствует количеству треков
audioSource.PlayOneShot(music[numberOfMusic], volume);
// Если нужно зациклить музыку, используйте корутину или Invoke
Invoke("PlayerSound", music[numberOfMusic].length); // Запускает следующую песню после окончания текущей
}
}
Ключевые изменения:
- Установлена громкость `volume` на более низкий уровень.
- Исправлен рекурсивный вызов `PlayerSound()` на использование `Invoke` для зацикливания воспроизведения музыки.
- Убедитесь, что `Random.Range` использует правильный диапазон от 0 до `music.Length`, чтобы избежать ошибок при доступе к массиву.
UnityEngine.AudioSource.PlayOneShot (UnityEngine.AudioClip clip, System.Single volumeScale) (at <16ee4ca70e684ffca23bc5c50d424433>:0)
Что делать? А то игра без музыки и не игра вовсе