DontDestroyOnLoad方法踩坑——场景A某物体用DontDestroyOnLoad,从场景B返回场景A时,会生成两个此物体

    技术2022-07-12  86

    目录

    问题再现:解决方法:补充:

    问题再现:

                      想让场景左侧目录列表“Canvas_Titles”,在下个场景中仍然显示,就在它的脚本里加了DontDestroyOnLoad方法

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class DontDestroy : MonoBehaviour { void Awake() { DontDestroyOnLoad(this.gameObject); } }

                      但从第二个场景返回时,出现了两个目录列表Canvas_Titles

    解决方法:

                      保留最早的,删掉后来生成的

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class DontDestroy : MonoBehaviour { void Awake() { DontDestroyOnLoad(this.gameObject); } void OnEnable() { GameObject[] canvasTitlsArray = GameObject.FindGameObjectsWithTag("CanvasTitles"); if (canvasTitlsArray.Length > 1) { for (int i = 0; i < canvasTitlsArray.Length; i++) { if (i == 0)//canvasTitlsArray.Length[0]是最早的 { continue; } else { Destroy(canvasTitlsArray[i]); } } } } }

    补充:

    此处找物体,最好用GameObject.FindGameObjectsWithTag

    Processed: 0.013, SQL: 9