C# 按下按钮时播放声音
我有一个1.5秒的音频文件-一个枪声。我希望能够在按下鼠标时播放声音(就像自动武器),我使用C# 按下按钮时播放声音,c#,unity3d,C#,Unity3d,我有一个1.5秒的音频文件-一个枪声。我希望能够在按下鼠标时播放声音(就像自动武器),我使用invokererepeating调用shot方法,重复率非常低: if (Input.GetButtonDown("Fire1")) { InvokeRepeating("Shoot", 0f, 1f/currentWeapon.fireRate); } else if (Input.GetButtonUp("Fire1")) { CancelInvoke("Shoot"); } 这就
invokererepeating
调用shot方法,重复率非常低:
if (Input.GetButtonDown("Fire1"))
{
InvokeRepeating("Shoot", 0f, 1f/currentWeapon.fireRate);
} else if (Input.GetButtonUp("Fire1"))
{
CancelInvoke("Shoot");
}
这就是拍摄方法:
void Shoot()
{
shootSound.PlayOneShot(shoot);
}
GameObject gunObj = Instantiate(gunObject);
Destroy(gunObj, 1f);
问题是声音被切断,镜头听不到,它只播放了几分之一秒而不是整个音频片段。我试过play()和playOneShot()
是否有一个选项可以分别播放每个剪辑的全部内容,比如创建它的克隆
谢谢 代码中的大部分内容都是不必要的。您不需要为此调用重复。由于您希望在按住按钮的同时继续播放声音(射击效果),因此应使用
Input.GetButton
而不是Input.GetButtonDown
,因为按下按钮的每一帧都是真的,并且该按钮是为自动点火等功能而设计的
带有时间的简单计时器。时间也应用于确定播放声音的速率,然后使用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
的值看起来不错,但这取决于声音。我解决了这个问题,我使用了一个带有音频源的空游戏对象,并在每个拍摄方法中实例化了一个副本:
void Shoot()
{
shootSound.PlayOneShot(shoot);
}
GameObject gunObj = Instantiate(gunObject);
Destroy(gunObj, 1f);
现在效果很好 PlayOneShot适合在这种情况下使用,但是如果没有您的代码,就不可能知道您在做什么。谢谢你的评论!1.不,我想让他们彼此“在上面”,只是从每个调用重复开始,然后让它一直播放到最后。目标是让它听起来像一把机关枪。2.shot函数是唯一调用PlayOneShot()的函数。shootSound是音频源,shoot是音频剪辑。3.它将声音播放到最后。声音本身很好。谢谢你的回答和编辑。我试过你的方法,但不幸的是声音一直被切断。即使我尝试使用高播放速率,比如2.5f(比剪辑长),它仍然在一开始就被切断。还有其他建议吗?我在一个新的测试场景中试过了。脚本可以工作,但它会将声音播放到最后,然后才开始下一个脚本-无论播放速率如何。我试图找到一种反复播放的方法,但要“分层”——比如在每次迭代中添加一个新的音频源,它将与之前的迭代同时播放,而不仅仅是循环播放原始声音。希望我说得更清楚。