AudioSource.PlayOneShot увеличение громкости и отсечение - PullRequest
0 голосов
/ 27 ноября 2018

Я пытался узнать об аудио в Unity и столкнулся с проблемой, когда громкость увеличивается до такой степени, что она заметно обрезается.

Звук запускается

GetComponent<AudioSource>().PlayOneShot(sound);

и кажется, что иногда он запускается несколько раз, что приводит к увеличению громкости, а иногда и к ограничению.

Я пытался использовать Play() и Stop() для решения проблемы, но это привело ко всемдругой звук тоже обрезается.У меня не было большого успеха в попытке создания новых аудиоисточников, но это может быть из-за недостатка знаний в этой области.

Как лучше всего предотвратить эту проблему?Могу ли я объявить несколько аудиоисточников из одного игрового объекта или я должен искать в другом месте?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

удалось это исправить!Проблема заключалась в том, что был доступен только один источник звука.Поэтому решение состоит в том, чтобы создать второй источник звука и использовать в сценарии

public AudioSource[] sounds;

void PlaySound (AudioClip sound)
{
    sounds = GetComponents<AudioSource>();
    AudioSource audioSource = sounds[1]; //Using the second AudioSource
    audioSource.clip = sound;
    audioSource.Stop(); //Stop any previous audio from playing
    audioSource.Play();

}

Большое спасибо - https://answers.unity.com/questions/52017/2-audio-sources-on-a-game-object-how-use-script-to.html

РЕДАКТИРОВАТЬ: улучшенный код.Приведенный выше код снова позволит воспроизводить только один клип за раз, поэтому я решил пойти дальше и создать код для каждого клипа в начале воспроизведения.Вот окончательный код

public Dictionary<string,AudioSource> sounds = new Dictionary<string, AudioSource>();

void PlayOneShotSound (AudioClip sound)
{
    //Check if AudioSource has been created for this clip
    if (!sounds.ContainsKey(sound.name)) 
    {
        sounds.Add(sound.name, gameObject.AddComponent<AudioSource>());
    }
    AudioSource audioSource = sounds[sound.name]; //Using AudioSource for the clip

    audioSource.clip = sound;

    audioSource.Stop(); //Preventing previous sound from being played
    audioSource.Play();
}
0 голосов
/ 27 ноября 2018

Используете ли вы источник звука для каждого игрового объекта, для которого вы хотите воспроизвести звук?Если это так, попробуйте создать один игровой объект (назовем его держателем аудиоисточника), который содержит только компонент аудиоисточника.

Имея это в виду, вы можете иметь ссылку на этот компонент Audio Source и вызывать PlayOneShot (звук) из скрипта, для которого вы хотите запустить звук.

Например, давайте предположим, что каждый развыпущена пуля, мы хотим воспроизвести звук:

public class Bullet : MonoBehaviour {
     // This AudioSource reference comes from the Audio Source Holder gameobject
     public AudioSource audioSource;

     public void PlayFireSound(){
         audioSource.PlayOneShot(sound);
     }
}

Надеюсь, что выше поможет.Вы также можете взглянуть на этот вопрос , где аудиофайл изменен на несжатый формат, например .wav, чтобы увидеть, решена ли ваша проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...