2014-05-18 125 views
0

我正在尝试创建一个触发区域,以便当您通过Is Trig触发器检查球体对撞机时,音乐开始启动,并且当您退出音乐时停止。只有一个问题。如果我真的从球形对撞机内部开始,向前迈进一步,那么“在清醒时播放”已经打开的音频停止一秒钟,音频重新开始。我猜,一旦我移动OnTriggerEnter函数被调用,所以它重新启动。我可以用什么方法开始播放球体内的球员,而一旦移动就不会重新开始音频?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; 
} 
} 

回答

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局部变量,你应该。

+0

谢谢你,我见过!audio.isPlaying之前使用过,但我完全忘了。此外,我会尝试从现在开始使可变的本地变量。 –

+0

欢迎您:) –