Unity中使用PlayOneShot播放上升音效重复问题求助
问题解决:按住W键时音效重复播放的修复
你这段代码的核心问题是逻辑判断错了——在按住W键的Input.GetKey分支里,else部分每帧都会把isKeyWHeld设为false,导致每两帧就会触发一次音效播放,自然出现重复播放的问题。
正确的逻辑应该是:
- 按住W键时,仅在首次按下的瞬间播放音效,之后保持“已播放”的标记状态
- 松开W键时重置标记,确保下次按下能重新触发音效
修复后的代码如下:
using UnityEngine; private AudioSource audioSourceGoingUp; // 标记W键是否处于按住状态 bool isKeyWHeld = false; // 把音效变量设为public,方便在Inspector面板直接赋值 public AudioClip raptorGoingUpSound; private void Start() { audioSourceGoingUp = GetComponent<AudioSource>(); } private void Update() { if (Input.GetKey(KeyCode.W)) { // 这里放飞机持续上升的逻辑,不受音效逻辑影响 // Some_other_code_is_here // 仅在首次按下W键时播放音效 if (!isKeyWHeld) { audioSourceGoingUp.PlayOneShot(raptorGoingUpSound); isKeyWHeld = true; } } else { // 松开W键时重置标记,为下次按下做准备 isKeyWHeld = false; } }
额外给两个优化建议:
- 如果你的上升音效是循环类音效,建议用
AudioSource.Play()和AudioSource.Stop()替代PlayOneShot,按住时启动循环音效,松开时停止,体验更贴合操作 - 把音效变量设为
public后,无需在代码里硬编码,直接在Unity编辑器的Inspector面板拖拽音效文件即可赋值
内容的提问来源于stack exchange,提问作者X R O M A N
相关产品推荐
相关产品推荐

