构建索引为 0 时背景音乐被破坏

Background music destroyed when build index is 0

我在整个游戏过程中都在播放这个背景音。 问题是我希望它在场景索引为 0 时停止。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class BackgroundMusic : MonoBehaviour
{

void Start()
{
    GameObject[] objs = GameObject.FindGameObjectsWithTag("music");
    if (objs.Length > 1)
    {
        Destroy(this.gameObject);
    }
    if (SceneManager.GetActiveScene().buildIndex != 0)
    {
        DontDestroyOnLoad(this.gameObject);
    }

}

我一直在使用这个脚本,但仍然不起作用 有什么建议吗?

如果您使用 DontDestroyOnLoad 它是“永远”的,您不必为每个场景都重复一次。

然后请注意,此后 Start 而不是 仅在第一次再次调用每个场景加载!

而是使用 SceneManager.sceneLoaded,例如

public class BackgroundMusic : MonoBehaviour
{

    private static BackgroundMusic _instace;

    private void Awake()
    {
        if (_instance && _instance != this)
        {
            Destroy(this.gameObject);
            return;
        }
        
        DontDestroyOnLoaddd(this.gameObject);
        _instance = this;

        SceneManager.sceneLoaded += OnSceneLoaded;
    }

    private void OnDestroy ()
    {
        SceneManager.sceneLoaded -= OnSceneLoaded;
    }

    private void OnSceneLoaded (Scene scene, LoadSceneMode mode)
    {
        if(scene.buildIndex == 0)
        {
            // TODO disable música
            // NOTE: I wouldn't Destroy this though but rather only stop the music
        }
        else
        {
            // TODO enable the music
        }
    }
}