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;