【问题标题】:Audio not playing in Unity音频无法在 Unity 中播放
【发布时间】:2022-05-01 07:18:18
【问题描述】:

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

这是我目前拥有的代码:

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

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

【问题讨论】:

  • 您确定您的声音不是在每一帧都反复播放,因此听不到实际的声音吗? Update 不是每帧吗?
  • 它甚至没有将剪辑传递给源,但我会将它放在 if 语句中
  • 我认为你在这里有一个设计错误,不是那种统一的知识,但我会说如果命中功能应该是敌人对象的一部分时播放声音。只是一个建议,也许其他人有更好的想法。
  • @Vulpex 它应该像这样工作。
  • @Charleh 是的,我确定它播放速度不是很快,我只是再次尝试,但它仍然无法使用编辑后的代码

标签: c# unity3d


【解决方案1】:

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

使用碰撞检测+碰撞器代替Update函数检测命中然后播放音频:

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

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

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

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

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

1AudioClip 未分配。

这是你的音频剪辑

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 所附加的 GameObject 被破坏,音频将无法播放。

解决方法是将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 GameObject。请参阅 #4 了解可能的解决方法。


6。代码甚至没有执行。

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

private void Update()
{

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

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

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

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

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


7.AudioSource 静音或音量为0


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


9.坏音频。替换为其他音频。

10.错误。转到帮助 ---> 报告错误.. 菜单并提交错误报告。

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

【讨论】:

  • 您的代码中有一个小错字。那应该是while (soundSource.isPlaying) 而不是while (!soundSource.isPlaying)
  • 不,我只希望它在不播放时播放它如果是 if(soundsource.isplaying) 则不会执行代码,因为它在播放时没有播放声源得到必须是 !soundsoure.isplaying 的代码,因为声源没有播放
  • @TheAmericanFox 回复我了吗?你检查过我的答案吗?
  • 啊!我有 2 号。我被困了半年 :D 谢谢你的帮助,先生!
  • 这确实帮助我解决了问题。,,, 我是 2 岁,但我不得不更改为 GAME VIEW 而不是 SCENE VIEW...如果不是这样我可能不会看到't for the great cmets.. ;] 哦,在主程序之前 ---> using UnityEngine.Audio
【解决方案2】:

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

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

【讨论】:

  • 相机默认有音频监听
  • 你的游戏对象靠近相机吗?删除播放音频的脚本并留下长音频(如歌曲)并设置在音频源“Play on Awake/Enable”中,并尝试将相机移动到离游戏对象更近的位置。你应该听。
  • 音源在二维空间中播放,无论离音源多远,您仍然会听到它
  • 签入音频源 -> 空间混合 (2D-3D)
  • 一旦你听到声音,你将不得不对被击中和播放音频的所有行为进行编码。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多