OnTriggerEnter重新启动音频

时间:2014-05-18 15:06:34

标签: unity3d

我正在尝试创建一个触发区域,以便当您通过选中Is Trigger进入球体对撞机时,音乐会启动,当您退出音乐时会停止。只有一个问题。如果我实际上从球体对撞机内部开始向前迈出一步,那么已经打开的音频会在清醒状态下播放。停止一秒钟,音频重新启动。我猜测一旦我移动OnTriggerEnter函数被调用,所以它重新启动。一旦移动,我可以用什么方式开始使用球体内的播放器而不重启音频?

    #pragma strict

private var theCollider: String;

function OnTriggerEnter (other : Collider)
{
theCollider = other.tag;
if(theCollider == "Player")
{
audio.Play();
audio.loop = true;
}

}

function OnTriggerExit (other : Collider)
{
theCollider = other.tag;
if(theCollider == "Player")
{
audio.Stop();
audio.loop = false;
}
}

1 个答案:

答案 0 :(得分:2)

答案

使用AudioSource.isPlaying确定音频片段是否已播放。并且只有在Play没有的情况下才会调用它。

function OnTriggerEnter (other : Collider)
{
    theCollider = other.tag;
    if (theCollider == "Player" && !audio.isPlaying)
    {
        audio.Play();
        audio.loop = true;
    }
}

旁注

请记住一条黄金法则:如果变量可以在本地生成,请将其设为本地。

违反此规则会导致您在上一个问题中显示的代码中出现错误(请参阅我对RaycastHit Randomly Gets 2 Hits的评论)。

我在这里谈论private var theCollider: String;。你可以制作theCollider局部变量。