我正在尝试创建一个触发区域,以便当您通过选中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;
}
}
答案 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
局部变量。