如何销毁标记为" DontDestroyOnLoad"当一个新场景加载?

时间:2015-09-06 16:36:29

标签: unity3d audio scripting unityscript scene

因此,我创建了一个音乐播放器,可以在不中断的情况下通过我的所有菜单和故事场景播放音乐,但在我的游戏场景中我想要删除该音乐。当我的游戏场景加载时,如何破坏播放的音乐?

这是我的音乐剧本:

#pragma strict

var offsetY : float = 40;
var sizeX : float = 100;
var sizeY : float = 40;

var musicPrefab : Transform;

function Start () {

if (!GameObject.FindGameObjectWithTag("MM")) {
    var mManager = Instantiate (musicPrefab, transform.position, Quaternion.identity);
    mManager.name = musicPrefab.name;
    DontDestroyOnLoad (mManager);
}
}

6 个答案:

答案 0 :(得分:3)

直接在它上面调用destroy:

{{1}}

DontDestroyOnLoad仅在加载新场景时保护对象不被破坏。

答案 1 :(得分:1)

我创建了一个名为Destroyer.js的脚本,并将其附加到我不想要音乐的场景中的相机上。然后在那个脚本中我添加了这段代码,它不再播放了。

function Start() {

Destroy(gameObject.Find("_MMusic"));
}

答案 2 :(得分:0)

你可以像Almo上面提到的那样调用Destroy(objectname) directy来破坏对象。您可以将它放在同一个函数调用中,该函数调用负责更改您不希望播放音乐的场景。

答案 3 :(得分:0)

我遇到了同样的问题,因此我尝试了以上答案中提到的Destroy(gameObject);,但对我而言无效。

所以我尝试了SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);,它对我有用。阅读官方文档here

答案 4 :(得分:0)

也许有点晚了,但是我使用了这个脚本,并且效果很好:

GameObject player = GameObject.FindGameObjectWithTag("Player");
if(player)
 Destroy(player);

答案 5 :(得分:0)

太简单了,菜鸟我花了一个小时才完成 只需将 Destroy(gameObject) 放在 Update 方法中:)