audio.Play()不起作用

时间:2013-12-16 03:37:44

标签: c# unity3d

我有一个名为Timer.cs的脚本。此脚本连接到某些GUI文本,该文本显示游戏中剩余的时间量。

此脚本附带一个音频源,选择了我想要的声音。当时钟到零时,文本变为“GAME OVER!”并且角色控制锁定;但是,声音没有播放。

我场景中audio.Play()的所有其他实例都正常工作,当我将音频源设置为“Play On Awake”时,它播放没有问题。可能是什么问题?

Using UnityEngine;
using System.Collections;

public class Timer : MonoBehaviour {


    public float timer = 300; // set duration time in seconds in the Inspector
    public static int sound = 1;
    public static int go = 1;
    bool  isFinishedLevel = false; // while this is false, timer counts down

    void  Start(){
       PlayerController.speed = 8;
       PlayerController.jumpHeight = 12;
    }

    void  Update (){
       if (!isFinishedLevel) // has the level been completed
       {
         timer -= Time.deltaTime; // I need timer which from a particular time goes to zero
       } 

       if (timer > 0)
       {
         guiText.text = timer.ToString();
       } 
       else 
       {
         guiText.text = "GAME OVER!"; // when it goes to the end-0,game ends (shows  time text   over...) 

         audio.Play();

         int getspeed = PlayerController.speed;
         PlayerController.speed = 0;

         int getjumpHeight =  PlayerController.jumpHeight;
         PlayerController.jumpHeight = 0;
       }
       if (Input.GetKeyDown("r")) // And then i can restart game: pressing restart.
       { 
         Application.LoadLevel(Application.loadedLevel); // reload the same level
       }
    }
}

2 个答案:

答案 0 :(得分:5)

鉴于您将其作为Update例程的一部分进行调用,我不得不猜测问题是您反复调用它。即只要timer <= 0,你就会在每一帧调用它。

您不应多次拨打Play()。或者至少在它正在播放时不会再次出现。一个简单的解决方案就是

if(!audio.isPlaying)
{
    audio.Play();
}

看看是否能解决您的问题,然后您就可以从中解决问题。

答案 1 :(得分:0)

我使用audio.Play();并使用它跟我修复了错误 GetComponent<AudioSource>().Play();