(统一)销毁当前场景中的游戏对象并在加载当前场景后使其永久销毁?
Posted
技术标签:
【中文标题】(统一)销毁当前场景中的游戏对象并在加载当前场景后使其永久销毁?【英文标题】:(Unity) Destroy a gameObject in the current scene and keep it permanently destroyed even after loading current scene? 【发布时间】:2019-12-02 10:35:43 【问题描述】:如何永久销毁游戏对象?也就是说,如果我在当前场景中销毁它,我希望游戏对象只存在一次,然后当我重新加载同一个场景时,我希望它被禁用/销毁。我如何做到这一点?
编辑:或者下面的脚本只能使用布尔变量运行一次?
void Update()
if(Input.GetKeyDown(KeyCode.A)
GameObject go = GameObject.Find("Cloner");
Destroy(go);
SceneManager.LoadScene("Home");
【问题讨论】:
如何在你的游戏对象上设置一个布尔标志,然后由你的查找方法检查。在 Find 中,如果标志为真(因此您无权访问请求的游戏对象)或标志为假,则返回 null 或返回该对象。 【参考方案1】:我通过在函数中使用 DontDestroyOnLoad() 来做到这一点
无效唤醒()
static bool created = false;
public bool Loading = true;
void Awake()
if(!created)
DontDestroyOnLoad(this.gameObject);
created = true;
else
Destroy(this.gameObject);
void Update()
if(Input.GetKeyDown(KeyCode.A) && LoadingOnce == true)
GameObject go = GameObject.Find("Cloner");
Destroy(go);
LoadingOnce = false;
SceneManager.LoadScene("Home");
【讨论】:
DontDestroyOnLoad
和它有什么关系?简单的布尔检查就足够了
@derHugo 我正在重新加载场景,这就是我需要激活此脚本的原因。
我看到了,但这没关系。静态布尔值不受重新加载场景的影响,因此只需将其设置为 true 一次并检查它以销毁对象就足够了……我会这样做 void Awake() if(created) Destroy (this.gameObject); created = true;
@derHugo 啊好吧我不知道这个。谢谢。以上是关于(统一)销毁当前场景中的游戏对象并在加载当前场景后使其永久销毁?的主要内容,如果未能解决你的问题,请参考以下文章
公共静态 Dictionary<String,GameObject> 中的游戏对象在 Unity 中的场景更改时被销毁
为啥我的非静态游戏对象在场景重新加载后会在脚本中丢失其引用?