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;

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值