按住按钮时播放声音



我有一个 1.5 秒的音频文件 - 一个枪声。我希望能够在按下鼠标时播放声音(就像自动武器一样(,我用InvokeRepeating调用射击方法,重复率非常低:

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

这是拍摄方法:

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

问题是声音被切断,听不到镜头,它播放了几分之一秒而不是整个音频剪辑。我尝试了play((和playOneShot((。

是否有选项可以单独播放每个剪辑,例如创建其克隆?

谢谢!

代码中的大多数内容都是不必要的。您不需要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的值似乎很好,但这取决于声音。

我解决了这个问题,我使用了一个带有音频源的空游戏对象,并在每个拍摄方法中实例化了一个副本:

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

现在完美运行!

最新更新