ПрограммированиеФорумЗвук

Unity3D: может ли один AudioSource воспроизводить несколько звуков одновременно?

#0
21:38, 9 сен 2016

Привет всем!
Экспериментирую со звуком в unity. Возникла ситуация, когда обьект ударяется, нужно воспроизвести звук. Так вот, в чем проблема: звук играется достаточно долго. Не успевает он закончить воспроизводиться, как новое воспроизведение звука прерывает старое. В итоге звук обрывается...
Меня интересует может ли AudioSource воспроизводить несколько звуков?
Как вообще решается данная проблема?
У меня пока одна мысль: нужно каждый раз при воспроизведении создавать обьект с AudioSource, назначить ему звук и все будет хорошо.
Но может это слишком ресурсзатратно? Есть другие варианты?

#1
9:49, 10 сен 2016

.PlayOneShot(clip); //опционально можно указать уровень громкости вторым параметром

#2
21:19, 10 сен 2016

SlavaLia
> .PlayOneShot(clip); //опционально можно указать уровень громкости вторым параметром
Это мне известно. Мне нужно в один момент времени запустить более 1 аудиоклипа.
Есть вариант сделать несколько AudioSources:
http://answers.unity3d.com/questions/175995/can-i-play-multiple-a… gameobje.html

Вот тут вообщем-то подтверждение моим словам:
http://answers.unity3d.com/questions/977606/how-to-play-multiple-… aneously.html

#3
23:54, 10 сен 2016

AudioSource.PlayAudioClipAtPosition
но лучше самому сделать свой вариант

#4
14:53, 11 сен 2016

Alerr
> Это мне известно. Мне нужно в один момент времени запустить более 1 аудиоклипа.

Так именно это и может делать функция .PlayOneShot(clip);
Она запускает звучание нового клипа и не останавливает звучание ранее запущенного клипа.

Скорее всего вы путаете её с функций .Play() - вот она то как раз использует аудио соурс в монопольном режиме.


Проверил только что у себя.
Код тестовый прилагается.
Две музыкальные композиции звучат одновременно.
Ч.Я.Д,Н.Т?

using UnityEngine;
using System.Collections;

public class TestSounds : MonoBehaviour {
  public AudioSource audio;
  public AudioClip clip1;
  public AudioClip clip2;
  
  void Update () {
    if(Input.GetKeyDown(KeyCode.Alpha1)){
      audio.PlayOneShot(clip1);
    }
    if(Input.GetKeyDown(KeyCode.Alpha2)){
      audio.PlayOneShot(clip2);
    }
  }
}
#5
14:58, 11 сен 2016

SlavaLia, спасибо) Да, я спутал ее с Play

ПрограммированиеФорумЗвук

Тема в архиве.