2

免责声明:这个问题是针对一个由于这个错误而没有完成的学校项目。项目结束了,可以为未来的开发人员提出建议,但我无法验证任何答案,因为我无法再访问源代码。

我目前正在使用 HTC Vive 和 Unity 3D 为学校项目创建鼓模拟。

为了做到这一点,我在 toms 和方法上使用了 BoxCollider:

void OnCollisionEnter(Collision col)
{
   GetComponent<AudioSource>().Play();         
}

这样当 HTC Vive 遥控器触碰通鼓时就会播放声音。问题是只要遥控器接触到汤姆,声音就会一直播放,而不是在碰撞时播放一次。

我也尝试OnTriggerEnter()了同样结果的方法。

4

2 回答 2

0

创建一个布尔变量并使用它来控制播放一次。

bool isPlaying = false;//defined somewhere
void OnCollisionEnter(Collision col)
{
   if (!isPlaying)
   {
     GetComponent<AudioSource>().Play();         
     isPlaying = true;
   }
}
于 2017-02-01T11:47:41.020 回答
0

您可以使用协程来不允许在声音剪辑的持续时间内重复声音。

void OnCollisionEnter(Collision col)
{
    if(!isPlaying)
    {
        AudioSource audio = GetComponent<AudioSource>();
        audio.Play();
        StartCoroutine(FinishSound(audio.clip.length));
    }
}

void OnCollisionExit(Collision col)
{
    isPlaying = false;
}

IEnumerator FinishSound(float l)
{
    yield return new WaitForSeconds(l);        
    isPlaying = false;        
}
于 2017-03-02T09:36:21.610 回答