You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:30:02