首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按住按钮时播放声音

按住按钮时播放声音
EN

Stack Overflow用户
提问于 2018-04-15 17:33:41
回答 2查看 1.1K关注 0票数 2

我有一个1.5秒的音频文件-一声枪声。我想在鼠标被按下时播放声音(就像自动武器),我用InvokeRepeating调用射击方法,repeatRate很低:

代码语言:javascript
复制
if (Input.GetButtonDown("Fire1"))
{
    InvokeRepeating("Shoot", 0f, 1f/currentWeapon.fireRate);
} else if (Input.GetButtonUp("Fire1"))
{
    CancelInvoke("Shoot");
}

这就是拍摄方法:

代码语言:javascript
复制
void Shoot()
{
    shootSound.PlayOneShot(shoot);
}

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

是否有一个选项,以充分发挥每一个剪辑,如创造克隆它?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-16 06:52:49

我解决了它,我使用了一个空的GameObject和一个AudioSource,并在每个射击方法中实例化了它的一个副本:

代码语言:javascript
复制
GameObject gunObj = Instantiate(gunObject);
Destroy(gunObj, 1f);

现在工作得很好!

票数 0
EN

Stack Overflow用户

发布于 2018-04-15 21:31:34

代码中的大多数内容都是不必要的。你不需要InvokeRepeating。由于您希望在按住按钮时继续播放声音(射击效果),所以应该使用Input.GetButton而不是Input.GetButtonDown,因为Input.GetButton是真的--按钮按下的每帧都是按下的,并且是为诸如自动射击之类的东西而制作的。

还应该使用带有Time.time的简单计时器来确定播放声音的速率,然后使用PlayOneShot函数播放声音。

应该是这样的:

代码语言:javascript
复制
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的价值似乎很好,但它取决于声音。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49844868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档