首页 > 解决方案 > 音频源即使被碰撞盒“触发”也不想工作

问题描述

我有一个奇怪的问题。我想用碰撞框触发音频文件。调试日志确认触发了音频源,但它会播放音频。这里可能是什么原因?

调试日志

我已将音频侦听器附加到我的相机,并将音频源附加到带有此代码的对象:

using UnityEngine;

[CreateAssetMenu(menuName = "ScriptableCookbook/Actions/PlayAudioAction")]
public class PlayAudioAction : ScriptableAction
{
    [SerializeField] private AudioClip clipToPlay = null;
    private AudioSource audioSource;

    public override void PerformAction(GameObject obj)
    {
        audioSource = obj.AddComponent<AudioSource>();
        audioSource.clip = clipToPlay;
        audioSource.playOnAwake = false;
        audioSource.spatialBlend = 1;
        audioSource.Play();
    }

    public override void StopAction(GameObject gameObject)
    {
        if (audioSource != null)
        {
            audioSource.Stop();
        }
    }
}

这些是具有盒子碰撞器(是触发器)的对象的检查器中的音频设置以及这些声音设置:

在此处输入图像描述

这就是声音本身:

在此处输入图像描述

标签: c#unity3daudio

解决方案


你太远了!

您启用了SpatialBlend = 1

在 Inspector 中,您可以看到衰减曲线,红线是您的音频听众所在的位置 => 距离太远,无法真正听到任何声音


您必须编辑该衰减,以便让您的音频听众听到更远的声音。

一般来说:是否有理由AudioSource按需添加该组件?

而是从一开始就将其添加到您的对象上,正确调整设置并且仅在您的代码中执行

public override void PerformAction(GameObject obj)
{
    audioSource = obj.GetComponent<AudioSource>();
    if(audioSource) audioSource.Play();
}

public override void StopAction(GameObject gameObject)
{
    if (audioSource)
    {
        audioSource.Stop();
    }
}

推荐阅读