未在 Unity 中播放的音频

The*_*Fox 4 c# unity-game-engine

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

这是我目前拥有的代码:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Pro*_*mer 9

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

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

void OnCollisionEnter(Collision collision)
{
    soundSource.Play();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

1 .AudioClip未分配。

这是您的音频剪辑

public AudioClip hurtSound;
Run Code Online (Sandbox Code Playgroud)

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

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

在此处输入图片说明


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

在此处输入图片说明


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

这个错误的例子

private void Update()
{
    soundSource.Play();
}
Run Code Online (Sandbox Code Playgroud)

可能的修复

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

private void Update()
{

    if (!soundSource.isPlaying)
    {
        soundSource.Play();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

修复方法是将 附加 AudioSource到不会破坏的 GameObject。一个空的 GameObject 没问题。

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

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

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

    //Now, destroy it
    Destroy(gameObject);
}
Run Code Online (Sandbox Code Playgroud)

5 .AudioSource附加到的游戏对象已被停用。

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

在此处输入图片说明


6 .代码甚至没有执行。

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

private void Update()
{

    if (!soundSource.isPlaying)
    {
        soundSource.clip = hurtSound;
        soundSource.Play();
        Debug.Log("Played");
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

A.Script 不附加到游戏对象。将它附加到一个游戏对象:

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明


7 .AudioSource静音或音量为0

在此处输入图片说明


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

在此处输入图片说明


9 .坏音频。替换为另一个音频。

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

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


Cho*_*opi 1

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

检查场景中是否有AudioListener以及AudioSource的设置