【问题标题】:AudioSource.PlayOneShot volume increase and clippingAudioSource.PlayOneShot 音量增加和削波
【发布时间】:2018-11-28 02:33:00
【问题描述】:

我一直在尝试了解 Unity 中的音频,但我遇到了一个问题,即音量增加到明显削波的程度。

声音是由

触发的
GetComponent<AudioSource>().PlayOneShot(sound);

它似乎有时会被多次触发,这会导致音量增加,有时还会出现削波。

我曾尝试使用Play()Stop() 来解决此问题,但这导致所有其他音频也被切断。我尝试创建新的音频源并没有取得多大成功,但这可能是由于我缺乏这方面的知识。

防止此问题的最佳方法是什么?我可以从一个游戏对象声明多个音频源还是应该寻找其他地方?

谢谢!

【问题讨论】:

    标签: unity3d audio


    【解决方案1】:

    设法修复它! 问题是,只有一个音频源可用。因此解决方案是创建第二个音频源并在脚本中使用

    public AudioSource[] sounds;
    
    void PlaySound (AudioClip sound)
    {
        sounds = GetComponents<AudioSource>();
        AudioSource audioSource = sounds[1]; //Using the second AudioSource
        audioSource.clip = sound;
        audioSource.Stop(); //Stop any previous audio from playing
        audioSource.Play();
    
    }
    

    非常感谢 - https://answers.unity.com/questions/52017/2-audio-sources-on-a-game-object-how-use-script-to.html

    编辑:改进的代码。上面的代码再次只允许一次播放一个剪辑,所以我决定更进一步,并在每个剪辑开始播放时为其创建代码。这是最终代码

    public Dictionary<string,AudioSource> sounds = new Dictionary<string, AudioSource>();
    
    void PlayOneShotSound (AudioClip sound)
    {
        //Check if AudioSource has been created for this clip
        if (!sounds.ContainsKey(sound.name)) 
        {
            sounds.Add(sound.name, gameObject.AddComponent<AudioSource>());
        }
        AudioSource audioSource = sounds[sound.name]; //Using AudioSource for the clip
    
        audioSource.clip = sound;
    
        audioSource.Stop(); //Preventing previous sound from being played
        audioSource.Play();
    }
    

    【讨论】:

      【解决方案2】:

      您是否为每个要播放声音的游戏对象使用音频源?如果是这样,请尝试创建一个仅包含音频源组件的游戏对象(我们称之为 Audio Source Holder)。

      考虑到这一点,您可以引用此音频源组件并从要触发声音的脚本中调用 PlayOneShot(sound)。

      例如,假设每次发射子弹时,我们都想播放声音:

      public class Bullet : MonoBehaviour {
           // This AudioSource reference comes from the Audio Source Holder gameobject
           public AudioSource audioSource;
      
           public void PlayFireSound(){
               audioSource.PlayOneShot(sound);
           }
      }
      

      希望以上内容有所帮助。您还可以查看question,其中音频文件已更改为未压缩格式,例如 .wav,看看您的问题是否已解决。

      【讨论】:

      • 感谢您的回复!我遇到的主要问题是一次播放多次音频导致音量增加。上面的代码不会有同样的问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多