unity3d - AudioSource.PlayOneShot音量增加和剪辑

标签 unity3d audio

我一直在尝试学习Unity中的音频,并且遇到一个问题,即音量增加到明显降低的程度。

声音触发于

GetComponent<AudioSource>().PlayOneShot(sound);

而且似乎有时会被触发多次,从而导致音量增加,有时会出现削波。

我尝试使用Play()Stop()解决此问题,但这也导致所有其他音频也被剪切。尝试创建新的音频源并没有取得很大的成功,但这可能是由于我对此 Realm 的知识不足所致。

预防此问题的最佳方法是什么?我可以从一个游戏对象中声明多个音频源,还是应该在其他地方查看?

谢谢!

最佳答案

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

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

关于unity3d - AudioSource.PlayOneShot音量增加和剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491658/

相关文章:

android - 尝试在Unity3d中编译 Assets 之一时编译项目卡纸

c# - Unity 的 GetComponent 通过字符串(或通过从另一个脚本传递的其他方法)

c# - Unity 如何执行它的方法?

android - 适用于 iOS、Android、React Native 的 Web 音频 API?

audio - vlc - 不播放由 opus 库中的演示创建的 opus 文件

c# - Unity3D C#。使用 transform.RotateAround() 函数同时保持两个对象之间的距离不变

c# - 为什么我的代码没有正确计算我持有的卡?

actionscript-3 - 我需要有关 sound.extract() 的更多信息

python - 使用 Python [摘要] 读取 wav 文件的最简单方法是什么?

.net - 使用Azure媒体服务更改播放速度(速度)