Ciel Bleu_ 2022-10-10 15:39 采纳率: 33.3%
浏览 177
已结题

unity如何让游戏结束音效只播放一次

FailAudio在游戏结束时一直循环播放,以下是GameManager的脚本

img

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
public CanvasGroup winBackground;
public CanvasGroup failBackground;
public float duration = 1f;
public AudioSource winAudio;
public AudioSource failAudio;
public AudioSource backgroundAudio;
public Button restartButton;
public Button quitButton;

private bool isWin = false;
private bool isFail = false;

private float passTime = 0;

private void Start()
{
restartButton.gameObject.SetActive(false);
quitButton.gameObject.SetActive(false);

}
public void Win()
{
isWin = true;
}
public void Fail()
{
isFail = true;
}
public void Update()
{
if(isWin)
{
showBackgroud(winBackground,winAudio);
}
else if(isFail)
{
showBackgroud(failBackground,failAudio);

    }

}
private void showBackgroud (CanvasGroup background, AudioSource audio)
{
passTime = passTime + Time.deltaTime;
background.alpha = passTime / duration;

    if(!audio.isPlaying)
    {
        audio.Play();        
    }     
      restartButton.gameObject.SetActive(true);
      quitButton.gameObject.SetActive(true);          

}

}

  • 写回答

1条回答 默认 最新

  • 於黾 2022-10-10 15:49
    关注

    你现在写进update里一直执行,只要isWin变成true,可不就一直播放吗
    你可以设置个变量判断一下,播放一次就让它变回false,别再播放了
    或者让showBackgroud基于事件调用,而不是在死循环里不停判断调用
    比如你把isWin设置成属性,只有当赋值的时候才去判断它是true还是false,而不是在死循环里一直判断

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月18日
  • 已采纳回答 10月10日
  • 创建了问题 10月10日

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器