unity-解决场景切换后,再切回来,原来已绑定的内容失效的问题

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

// 场景切换-重新绑定测试
public class ReBindTest : MonoBehaviour
{
    public static ReBindTest instance = null;
    public GameObject canvas_HideCut;

    void Awake()
    {
        if (instance == null)
        {
            instance = this;
            // 使用 sceneLoaded 来进行重新绑定
            SceneManager.sceneLoaded += OnSceneLoaded;
        }
        else if (instance != null)
        {
            Destroy(gameObject);
        }
        DontDestroyOnLoad(gameObject);
    }

    void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        Init_BindHideCut();
    }

    private void Init_BindHideCut()
    {
        var hideCut = GameObject.Find("HideCut");
        canvas_HideCut = hideCut.transform.Find("Canvas_HideCut").gameObject;
    }
}

场景切换后再切回来引用无效描述(如场景A->场景B->场景A):

1. 如果原先是使用在界面上进行进行拖拉赋值(如canvas_HideCut对象),则切回来后,此对象的引用将会无效

2. 如果使用代码进行赋值(直接在 Awake 中或 Start 中 直接赋值),则切回来后,此对象的引用也会无效

解决:如果需要重新绑定,必需使用 sceneLoaded 来进行监听,并在其中进行重新绑定,才能有效,直接在Awake或Start中直接赋值,或界面上直接拖拉赋值,都不行。正解如下:

SceneManager.sceneLoaded += OnSceneLoaded;

你可能感兴趣的:(unity,3d,c#,unity)