当第一个剪辑停止时,不能让第二个AudioClip开始

本文关键字:不能 第二个 AudioClip 开始 第一个 | 更新日期: 2023-09-27 18:16:24

新手编码员

简单地说,当玩家点击屏幕上的按钮时,一个机器人就会被实例化,四处走动一会儿,然后播放"奔跑"的声音。一旦机器人电量耗尽,声音停止播放,并且一个新的"停止"声音应该播放。

除了最后一部分,其他都可以。一旦"running"的声音停止播放,我就无法让"stop"的声音播放。我在Update函数中处理这个逻辑。

private AudioSource 
    robotRun_big,
    robotStop_big;
private RobotMover robotMover;
// Omitted AddAudio() function that works fine.
void Awake()
{
    // Contains a variable I use as a timer
    robotMover = GetComponent<RobotMover>();
    // Declare and initialize an AudioClip
    AudioClip clipRobotRun_big = Resources.Load("SFX_19-23/robotRun_big") as AudioClip;
    // Initialize an AudioSource (declared as a private variable above)
    robotRun_big = AddAudio(clipRobotRun_big, true, false, 0.5f);
    // Same as above
    AudioClip clipRobotStop_big = Resources.Load("SFX_19-23/robotStop_big") as AudioClip;
    robotStop_big = AddAudio(clipRobotStop_big, false, false, 1.0f);
}
// This is handled elsewhere, but it determines which object player clicks
public void CheckGameObject(GameObject clicked)
{
    if(clicked.name == "RobotGrower")
        robotRun_big.Play(); // This works fine
}

void Update()
{
    if(robotMover.robotPower <= 0)
        robotRun_big.Stop(); // This works fine.
    if(!audio.isPlaying)
        robotStop_big.Play(); // This DOES NOT work fine.
}

我也试过这个:

if(robotMover.robotPower <= 0)
    robotRun_big.Stop();
    robotStop_big.Play();

:

if(robotMover.robotPower <= 0)
    robotRun_big.Stop();
    robotStopped = true;
if(robotStopped)
    robotStop_big.Play();

如果我从Awake或其他地方播放robotStop_big剪辑,则播放良好。只是在Update中没有那个逻辑。很明显,我漏掉了什么。任何帮助都是感激的。谢谢。

当第一个剪辑停止时,不能让第二个AudioClip开始

而不是:

if(!audio.isPlaying)
    robotStop_big.Play();

使用:

if (!robotRun_big.isPlaying)
    robotStop_big.Play();

GameObject。audio将返回一个AudioSource组件,但是不能保证它返回的AudioSource就是你想要的那个。因为你要定义多个audiosource,所以使用它们来代替。audio访问器。

禁止这种改变,另一件要尝试的事情是确保你放入robotStop_big AudioSource的AudioClip没有设置为3D。