Unity - не могу установить аудио клип в C # - PullRequest
1 голос
/ 25 апреля 2019

EDIT!Я получил его, переместив source.play в функцию в обновлении, и теперь я вызываю его с логическим значением.

В данный момент я кодирую набор ударных VR в Unity и мне нужен Unityвоспроизводить звук, когда он получает сообщение OSC от устройства ввода.Все OSC, с которыми я работаю, но когда я хочу воспроизвести звуки, они просто полностью останавливаются.

У меня есть 2 аудиоклипа, между которыми я хочу переключиться, и я попробовал с 2 аудиоисточниками и 1 аудиоисточником снесколько аудиоклипов, но оба без удачи.У меня запущена отладка, и она запускает запуск команды, но затем останавливается перед тем, как перейти к печати debug.log.

 if ((int)oscVal == 3)
        {
            lastTime2 = currentTime;
            DC.isActive2 = true; //It runs to this part here and then stops 
            source2.Play(); //This line doesn't seem to run
            Debug.Log("Activated Drum2"); //This line doesn't run either
        }

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

1 Ответ

1 голос
/ 25 апреля 2019

Сначала вам нужно определить переменную AudioSource и назначить ей аудиоклип, который выдает редактору, и вы можете использовать этот код для этого

public AudioSource audioSource;
public AudioClip clip;

public void PlayMusic( bool isLoopSound) 
  { 
       audioSource.clip =clip;
       if (isLoopSound) {
            audioSource.loop = true;
        }
        else {
            audioSource.loop = false;
        } 
   }

Второй, если вы хотите воспроизводить музыку по пути к файлу

 public AudioSource audioSource;

 public IEnumerator PlayMusicFromPath(string filePath, bool isLoopSound)
    {
        if (File.Exists(filePath)) {
            using (WWW www = new WWW("file://" + filePath)) {   
                yield return www;
                if(www != null) {
                    audioSource.clip = www.GetAudioClip();
                    if (isLoopSound) {
                        audioSource.loop = true;
                    }
                    else {
                        audioSource.loop = false;
                    }
                    audioSource.Play();
                    yield return null;
                }
                else {
                    Debug.Log("WWWW is null");
                    yield return null;
                }
            }
        }
        else
        {
            yield return null;
        }
    }
...