按住按钮时播放声音

时间:2018-04-15 17:33:42

标签: c# unity3d

我有一个1.5秒的音频文件 - 一个枪声。我希望能够在按下鼠标时播放声音(如自动武器),并使用InvokeRepeating调用拍摄方法,使用非常低的repeatRate:

if (Input.GetButtonDown("Fire1"))
{
    InvokeRepeating("Shoot", 0f, 1f/currentWeapon.fireRate);
} else if (Input.GetButtonUp("Fire1"))
{
    CancelInvoke("Shoot");
}

这是拍摄方法:

void Shoot()
{
    shootSound.PlayOneShot(shoot);
}

问题是声音切断并且无法听到镜头,它只播放了一小段时间而不是整个音频片段。我试过play()和playOneShot()。

是否可以选择单独播放每个剪辑,比如创建它的克隆?

谢谢!

2 个答案:

答案 0 :(得分:2)

代码中的大多数内容都是不必要的。您不需要InvokeRepeating。由于您希望在按住按钮时继续播放声音(拍摄效果),因此应使用Input.GetButton代替Input.GetButtonDown,因为Input.GetButton每按一次按钮都为真适用于汽车火灾等。

还应使用Time.time的简单计时器来确定播放声音的速率,然后使用PlayOneShot功能播放声音。

这应该是这样的:

public float playRate = 1;
private float nextPlayTime = 0;

public AudioSource shootSound;
public AudioClip shoot;


void Update()
{
    if (Input.GetButton("Fire1") && (Time.time > nextPlayTime))
    {
        Debug.Log("Played");
        nextPlayTime = Time.time + playRate;
        shootSound.PlayOneShot(shoot);
    }
}

playRate变量设置为1,这意味着每秒发出1个声音。您可以使用此变量来控制播放速率。降低它以播放许多声音。 0.1f的值似乎没问题,但这取决于声音。

答案 1 :(得分:0)

我解决了它,我使用了带有AudioSource的空GameObject,并在每个Shoot方法中实例化了它的副本:

GameObject gunObj = Instantiate(gunObject);
Destroy(gunObj, 1f);

现在完美运作!