当EventSystem在场景中时,AudioSource无法在Unity3d中播放

时间:2018-09-25 14:44:58

标签: c# unity3d audio

我花了一段时间才找到它,我什至不得不重新创建场景,而我碰巧忘记了EventSystem,但是...我正在开发一个简单的2D应用程序。按下一个按钮,它将播放随机声音。这很简单。有一个Button UI元素,OnClick调用我的脚本(在对象上),然后该脚本播放音频。

我想添加一个Pitch滑块,以便脚本将音频剪辑分配给AudioSource,然后将UI Slider的OnValueChanged附加到脚本中。现在我意识到我需要添加EventSystem,但是现在我的按钮将无法播放音频!

我在Play()调用之前有Debug.Log语句,所以我知道按钮回调在起作用,只是没有音频。删除EventSystem之后,这些按钮可以正常播放音频,但是现在无法使用滑块了。想法?

使用2018.2-Android构建

编辑

private AudioSource audioSource;

....

IEnumerator PlayClip() {
    // Do stuff

    audioSource.clip = audioClip;
    audioSource.Play();
    while(audioSource.isPlaying)
        yield return new WaitForSeconds(0.5f);
}

public void ButtonPushed() {
    StartCoroutine(PlayClip());
}

public void ChangePitch(float pitch) {
    audioSource.pitch = pitch
}

然后,滑块OnValueChanged()仅调用ChangePitch,范围为-3到3。以上所有代码只是一个脚本,并附加到一个Controller对象。

不用担心,协程逻辑比那更好:)

1 个答案:

答案 0 :(得分:1)

您的问题可能与此Unity issue有关:

  

[AUDIOSOURCE]禁用循环时,不播放带负音调的音频

     

用户不应使用负音高值,除非有人希望剪辑   在循环中倒退播放。如果用户希望它播放一次   向后,首先他/她需要设置位置   AudioSource.time到剪辑的结尾,然后播放。

我自己进行了测试,并且能够在以下情况下重现您的问题:

  • 在音频源上禁用循环。
  • 音高从负值开始。

如果音高的起始值为正,或者在启用循环的情况下为负,那么我可以使用滑块将音高在-3到3之间移动。