我有一个协同程序,用来跟踪时间和分数。每10秒,分数更新,并播放一个声音,每6秒,有另一个声音。当时间到0游戏结束。这部分工作正常。问题是在我突出显示的区域。
在与检查点发生冲突时,我想将时间增加5秒并播放声音,但在发生冲突时时间没有增加,也没有播放声音。为了调试,我添加了Debug.log("Collided")
行以确保发生冲突,并且在发生冲突时控制台显示已碰撞,因此冲突没有问题。
这是我的检查点触发代码:
private void OnTriggerEnter(Collider other)
{
print("Hit checkpoint");
PlayerPrefs.SetInt("CheckPointHit", 1);
gameObject.SetActive(false);
}
协同程序的代码
IEnumerator LoseTime()
{
while (true)
{
yield return new WaitForSeconds(1);
currentTime--;
if (currentTime % 10 == 0)
{
currentScore -= SCORE_INCREMENT;
GameObject.FindGameObjectWithTag("MainCamera").GetComponent<AudioSource>().PlayOneShot(scoreSound);
}
if (currentTime % 6 == 0)
{
GameObject.FindGameObjectWithTag("MainCamera").GetComponent<AudioSource>().PlayOneShot(explosionSound);
}
if (PlayerPrefs.HasKey("CheckPointHit"))
{
if (PlayerPrefs.GetInt("CheckPointHit") == 1)
{
currentTime += TIME_INCREMENT;
GameObject.FindGameObjectWithTag("MainCamera").GetComponent<AudioSource>().PlayOneShot(checkpointSound);
PlayerPrefs.SetInt("CheckPointHit", 0);
Debug.Log("Collided");
Debug.Log(currentTime);
}
}
if (currentTime <= 0)
break;
if (gameEnd == true)
break;
}
GameOver();
}
在与检查点发生冲突时,我想将时间增加5秒并播放声音,但在发生冲突时时间没有增加,声音也没有播放。
更新:根据调试语句Debug.Log(currentTime);
,时间似乎在增加,但在显示屏中未增加。
要显示的函数如下所示,我在Update()
中调用它:
private void UpdateLabels()
{
tmScore.text = "Score: " + currentScore;
tmTimeLeft.text = "Time Left: " + currentTime;
}
1条答案
按热度按时间6jygbczu1#
这种编码方法非常繁重。请记住
GameObject.Find
和GetComponent
函数是最繁重的,在不需要它们的时候应该避免使用。在播放声音之前,请确保
AudioListener
和AudioSource
设置正确,测试时最好在2D上测试。然后编写下面的代码就足够了,如果运行
Debug.Log
时错误没有解决,那么声音问题不是来自您的代码。