加载下一个场景后音频立即停止

Audio stops instantly after loading next scene

我是unity新手,解决不了一个问题。我有一个声音和一个脚本。在碰撞时它应该播放声音并且它确实这样做了但它也会加载下一个场景并且不会立即停止声音。

这是我的代码

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() 是播放和停止音乐的 public 函数,但您可以用任何东西做到这一点,您只需要调用 GameObjec.FindGameObjectWithTag("audioObj");

希望我有所帮助!