unity3d 音频无法播放,我无法理解

5kgi1eie  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(199)
public AudioSource audioscd;
public GameObject nextscn;
    
[SerializeField] Clue firstclue;
[SerializeField] ClueSecond secondclue;
[SerializeField] ClueThird thirdclue;
    
// Start is called before the first frame update
void Start()
{
  nextscn.SetActive(false);
}
    
// Update is called once per frame
void Update()
{
  if (firstclue.clue1 && secondclue.clue2 && thirdclue.clue3) 
  {
    StartCoroutine (Wait());           
    nextscn.SetActive(true); 
    audioscd.Play();
  }
}

所以我有三个布尔值(因为有三个线索),当三个布尔值都为真时,会发生两件事:
1.立方体“激活”,这是下一个场景的触发器
1.播放声音
第一件事发生了,所以这个工作,但声音不播放时,我点击外面的“游戏”屏幕(仍然在统一)。
当你找到线索时,每个线索都会播放一个声音。Unity可以同时播放两个声音吗?
我做错了什么?

vuv7lop3

vuv7lop31#

我认为问题在于,当所有3个布尔值都为真时,您将在每一帧的AudioSource上调用Play()。当在一个已经在播放的AudioSource上调用Play()时,它将再次从文件的开头开始。因此,如果在文件的最开头没有任何实际的音频内容,您将听不到任何声音-如果有,您可能会听到一些奇怪的毛刺声音。
我建议你在你的脚本中添加另一个bool,并将其作为一个过滤器,这样你就只能执行一次与查找所有提示相关的操作。

public AudioSource audioscd;
public GameObject nextscn;

[SerializeField] Clue firstclue;
[SerializeField] ClueSecond secondclue;
[SerializeField] ClueThird thirdclue;

bool hasFoundAllClues;

// Start is called before the first frame update
void Start()
{
    nextscn.SetActive(false);
}

// Update is called once per frame
void Update()
{
    if (!hasFoundAllClues && firstclue.clue1 == true && secondclue.clue2 == true && thirdclue.clue3 == true) 
    {
        hasFoundAllClues = true;
        StartCoroutine (Wait());           
        nextscn.SetActive(true); 
        audioscd.Play();
    }
}

另一种选择是将当前在Update()中的代码放入一个协程中,该协程可以在Start()中启动,并在找到所有3个线索时停止。

相关问题