(统一)销毁当前场景中的游戏对象并在加载当前场景后使其永久销毁?

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 中的场景更改时被销毁

为啥我的非静态游戏对象在场景重新加载后会在脚本中丢失其引用?

Unity3D 灵巧小知识点 ☀️ | 切换场景后保留上个场景中的游戏物体不被销毁

Unity 异步加载场景

replaceScene 是只替换当前场景还是替换 Cocos2d 中的所有场景