我是新来的团结,不能解决问题。我有一个声音和一个剧本。在碰撞时,它应该播放声音,它这样做了,但它也加载了下一个场景,并没有停止声音。
这是我的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScoreCounter : MonoBehaviour
{
public GameObject Step;
public int scoreCounter;
public float speedGain = 0f; //-026f
private AudioSource audioSource;
public AudioClip Scored;
private void OnTriggerEnter2D(Collider2D collision)
{
scoreCounter++;
if (scoreCounter == 1)
{
speedGain = -0.235f;
}
if (collision.name == "gates")
{
scoreCounter -= 1;
audioSource = GetComponent<AudioSource>();
audioSource.clip = Scored;
audioSource.Play();
}
speedGain -= 0.025f;
Instantiate(Step, new Vector2(0.0f, 5.0f), Quaternion.identity);
}
}
Unity自动停止您的声音,因为当您启动或加载新场景时,您的audioSource被禁用。
您可以通过使用一些插件来避免这种情况,如FMOD,但我建议使用DontDestroyOnLoad()
来避免出现这种问题,这是一个简单的解决方案。
首先将audioSource放在一个空的gameObject中,并使用您的脚本,并为其添加一个随机标记,如";audioObj";。然后,您需要调用附加脚本的Awake
中的DontDestroyOnLoad()
:
private void Awake()
{
DontDestroyOnLoad(transform.gameObject);
audioSource = GetComponent<AudioSource>();
}
通过这种方式,你可以从所有场景开始播放音乐,而不会出现问题,或者音乐可以用以下简单的行停止:
GameObject.FindGameObjectWithTag("audioObj").GetComponent<AudioScript>().PlayMusic();
还有
GameObject.FindGameObjectWithTag("audioObj").GetComponent<AudioScript>().StopMusic();
其中AudioScript是音频的脚本,PlayMusic()
和StopMusic()
是播放和停止音乐的公共函数,但你可以用任何东西来做,你只需要调用GameObjec.FindGameObjectWithTag("audioObj");
希望我能帮上忙!