音频不在Unity中播放

时间:2018-03-23 13:56:43

标签: c# unity3d

我正在尝试编写一个脚本,当你击中一个敌人它播放声音时,问题是我无法播放它看到音频源的声音但是我的剧本没有通过夹到它。

以下是我目前的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

public class makeanoise : MonoBehaviour
{
    public AudioClip hurtSound;
    public AudioSource soundSource;

    private void Update()
    {

        if (!soundSource.isPlaying)
        {
            soundSource.clip = hurtSound;
            soundSource.Play();
        }
    }
}

如何让音频源播放声音?因为甚至我的队友都不知道这样做

2 个答案:

答案 0 :(得分:3)

  

我正在尝试编写一个脚本,当你击中一个敌人时它会播放一个   声

使用碰撞检测+对撞机代替更新功能来检测命中然后播放音频:

void OnCollisionEnter(Collision collision)
{
    soundSource.Play();
}

如果是2D游戏,请改用OnCollisionEnter2D

  

我无法播放它看到音频源的声音,但我的声音   脚本不会将剪辑传递给它。

有很多原因导致Audio很多人无法在Unity中播放。你的声音不会播放而不是,因为你把它放在Update函数中。它不是Update函数的原因就像你提到的一样,因为你用{{1}来保护它所以它只会在第一个播放时再次播放。

音频无法在Unity播放的原因 :(可能不太可能)

1 if (!soundSource.isPlaying)未分配。

这是您的AudioClip

AudioClip

如果未在编辑器中或通过代码分配或初始化public AudioClip hurtSound; ,Unity将不会抛出任何错误。它根本不会播放。

只需将音频拖到hurtSound插槽即可听到声音。有时,音频参考会丢失,因此请再次重复此步骤以重新创建参考。

enter image description here

2 。编辑器已静音。如果编辑器静音,则不会发出声音,但构建应该有声音。检查并禁用编辑器上的静音。

enter image description here

3 。每帧播放声音。这个错误并不罕见,它导致AudioSource没有时间一遍又一遍地播放音频。

此错误的示例

hurtSound

可能的修复

在播放之前检查音频是否正在播放。(这个问题的代码中是否正确!)

private void Update()
{
    soundSource.Play();
}

4 private void Update() { if (!soundSource.isPlaying) { soundSource.Play(); } } 附加的GameObject已被销毁。 这也很常见。如果已附加AudioSource的游戏对象被销毁,则音频将无法播放。

修复是将AudioSource附加到不会破坏的GameObject。一个空的GameObject很好。

或者你可以播放音频,等待它完成播放然后销毁它:

AudioSource

5 IEnumerator playAudio() { //Play Audio soundSource.Play(); //Wait until it's done playing while (soundSource.isPlaying) yield return null; //Now, destroy it Destroy(gameObject); } 所附加的GameObject已停用。

如果取消激活AudioSource的GameObject,音频也会停止。不要停用Audiosource GameObject。有关可能的解决方法,请参阅#4

enter image description here

6 。代码甚至没有执行。

您必须确保AudioSource代码正在执行。一个简单的Play函数调用足以确定这一点。

Debug.Log

enter image description here

如果在“控制台”选项卡中看不到该日志,则表示代码未执行。

A.Script未附加到GameObject。将它附加到GameObject:

enter image description here

B.脚本附加的GameObject不是Active。从编辑器激活它:

enter image description here

C.脚本未启用。启用它:

enter image description here

7 private void Update() { if (!soundSource.isPlaying) { soundSource.clip = hurtSound; soundSource.Play(); Debug.Log("Played"); } } 已静音或音量为AudioSource

enter image description here

8 0组件不存在。这是不太可能的,因为它会自动连接到您的相机。检查是否被误删除然后重新连接到相机。它必须连接到相机而不是任何其他物体。

enter image description here

9 .Bad Audio。替换为另一个音频。

<强> 10 .Bug。转到帮助 ---&gt; 报告错误报告的错误.. 菜单和文件。

如果上述所有内容都失败了,该怎么办。这不太可能是问题,但可能会在操作系统更新时发生。

答案 1 :(得分:0)

您需要在场景中使用AudioListener并检查3D声音设置,最常见的是将AudioListener连接到主摄像头。

检查场景中是否有AudioListenerAudioSource

的设置