繁体   English   中英

音频无法在 Unity 中播放

[英]Audio not playing in Unity

我正在尝试编写一个脚本,当你击中敌人时它会播放声音,问题是我无法让它播放它看到音频源的声音但我的脚本不会将剪辑传递给它。

这是我目前拥有的代码:

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();
        }
    }
}

你如何获得音频源来播放声音? 因为连我的队友都不知道该怎么做

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

使用碰撞检测 + collider 而不是 Update 函数来检测命中然后播放音频:

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

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

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

很多音频无法在 Unity 中播放的原因有很多。 你的声音不会播放不是因为你把它放在Update功能中。它不是像某些提到的Update功能的原因是因为你用if (.soundSource.isPlaying)保护它所以它只会在第一个时再次播放正在玩。

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

1 AudioClip未分配。

这是你的音频剪辑

public AudioClip hurtSound;

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

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

在此处输入图像描述


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

在此处输入图像描述


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

这个错误的例子

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

可能的修复

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

private void Update()
{

    if (!soundSource.isPlaying)
    {
        soundSource.Play();
    }
}

4 AudioSource所依附的GameObject 已被销毁。 这也很常见。 如果 AudioSource 附加到的AudioSource被销毁,则音频将不会播放。

解决方法是将AudioSource附加到不会破坏的 GameObject。 一个空的游戏对象就可以了。

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

IEnumerator playAudio()
{
    //Play Audio
    soundSource.Play();

    //Wait until it's done playing
    while (soundSource.isPlaying)
        yield return null;

    //Now, destroy it
    Destroy(gameObject);
}

5 AudioSource附加到的GameObject 已停用。

如果停用具有Audiosource的游戏对象,音频也会停止。 不要停用AudioSource游戏对象。 请参阅#4了解可能的解决方法。

在此处输入图像描述


6 .代码甚至没有执行。

您必须确保Play代码甚至正在执行。 一个简单的Debug.Log函数调用就足以确定这一点。

private void Update()
{

    if (!soundSource.isPlaying)
    {
        soundSource.clip = hurtSound;
        soundSource.Play();
        Debug.Log("Played");
    }
}

在此处输入图像描述

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

A.Script 未附加到游戏对象。 将其附加到游戏对象:

在此处输入图像描述

B.脚本附加到的游戏对象不是活动的。 从编辑器中激活它:

在此处输入图像描述

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

在此处输入图像描述


7.AudioSource AudioSource或音量为0

在此处输入图像描述


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

在此处输入图像描述


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

10.错误。 转到帮助--->报告错误..菜单和文件以获取错误报告。

如果上述一切都失败了,这就是该怎么做。 这不太可能是问题,但在操作系统更新较大时可能会发生。

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

检查场景中是否有任何AudioListenerAudioSource的设置

还有一件事可能导致它的音高设置——我的设置为 0——我可以看到混音器中播放的音频——但听不到声音——将音高移回 1——一切正常。

只是为了帮助其他人,像 ash a 提到的音高设置实际上会导致一些奇怪的错误,我的音频源的音高设置为 -1,因为我有一个机械师,通过连续点击一些东西来增加 sfx 音高。 在点使用AudioSource.PlayClip允许播放声音,但我随后删除AudioSource.PlayClipAtPoint以使用缓存的AudioSource ,确保当我想要播放 GameOver 声音时音高初始化为 1f,并且一切都按预期工作。

我通过在主摄像头的位置播放AudioSource.clip解决了这个问题。 传入一个xyz都等于0Vector3播放声音,但它更安静。 我从来没有让AudioSource.Play()工作。

AudioSource.PlayClipAtPoint(audioSource.clip, mainCamera.transform.position);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM