【问题标题】:AudioSource not playing in Unity3d when EventSystem is in Scene当 EventSystem 在场景中时,AudioSource 未在 Unity3d 中播放
【发布时间】:2018-09-25 14:44:57
【问题描述】:

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

我想添加一个音高滑块,以便脚本将音频剪辑分配给 AudioSource,并将 UI 滑块的 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
}

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

别着急,协程逻辑比那好一点:)

【问题讨论】:

  • 我认为我们需要查看与滑块的OnValueChanged() 事件相关的代码才能弄清楚这一点。
  • 是的,我想有人会要代码。不幸的是,几个小时都无法到达。我会尽力而为,请参阅上面的编辑。
  • 你说这发生在 Android 上……它也发生在编辑器中吗?
  • 是的,两者都发生了。

标签: c# unity3d audio


【解决方案1】:

您的问题可能与此Unity issue

[AUDIOSOURCE] 禁用循环时不播放具有负音高的音频

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

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

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

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

【讨论】:

  • 这很有趣。我选择这些值只是因为那是我添加默认值时的 AudioSource 音高范围。您将如何改变音高范围?
  • 您是否打算在任何时候反向播放剪辑?如果没有,您可以尝试调用 ChangePitch,范围为 0 到 3。您应该能够将滑块的最小值设置为 0,将最大值设置为 3。然后将该值直接传递给 audioSource.pitch
  • 是的,这可能是我能做的。我不打算倒着玩。但这仍然不能解释 EventSystem。当 EventSystem 被移除时,音频会播放。 AudioSource.pitch 范围仍然相同 (-3, 3)。
  • 您说没有事件系统就无法使用滑块,所以我假设没有事件系统OnChangeValue() 不会触发,因此永远不会调用ChangePitch()
  • 是的,但 Sliders OnChangeValue() 回调仅在用户滑动/与滑块交互时调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
相关资源
最近更新 更多