构建索引为 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
}
}
}
我在整个游戏过程中都在播放这个背景音。 问题是我希望它在场景索引为 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
}
}
}