Unity场景加载事件

转自个人简书:2020.10.22完成

API:SceneManager.activeSceneChanged,SceneManager.sceneLoaded,SceneManager.sceneUnloaded
这三个api分别对应着场景切换事件,加载事件,卸载事件。但是它们的执行顺序是卸载事件传入参数Scene,先卸载当前场景,着时候可以获取到当前卸载场景的信息(传入的Scene这个结构体里)。然后是场景切换事件,传入两个Scene作为参数,通过调试可以看到第一个参数我们获取到了基本无用,第二个参数是需要被切换场景的数据。最后调用加载场景的事件,传入参数结构体Scene枚举LoadSceneModeLoadSceneMode这个枚举参数可以控制新场景是单独加载场景还是叠加场景。

复制代码
public class ChangeScene : MonoBehaviour
{
    [SerializeField] private GameObject infoGameobj;
    [SerializeField] private Text text;
    [SerializeField] private InputField inputField;
    [SerializeField] private Button button;
    private StringBuilder info=new StringBuilder(100);
    private void Awake()
    {
        if (infoGameobj != null) DontDestroyOnLoad(infoGameobj);
    }
 void Start()
    {
        button.onClick.AddListener(() =>
        {
            SceneManager.LoadScene(inputField.text);
            info.Clear();
        });
        SceneManager.activeSceneChanged += SceneManager_activeSceneChanged;
        SceneManager.sceneLoaded += SceneManager_sceneLoaded;
        SceneManager.sceneUnloaded += SceneManager_sceneUnloaded;
    }
private void SceneManager_activeSceneChanged(Scene arg0, Scene arg1)
    {
        info.Append($"场景在变动:{arg0.name}"   );
        info.Append($"场景在变动:{arg1.name}"   );
        Debug.Log(info);
    }

    private void SceneManager_sceneUnloaded(Scene arg0)
    {
        info.Append($"正在卸载场景:{arg0.name}"   );
        Debug.Log(info);
    }
private void SceneManager_sceneLoaded(Scene arg0, LoadSceneMode arg1)
    {
        info.Append("正在加载场景:"   );
        info.Append($"arg0.name:{arg0.name}   ");
        info.Append($"arg0.name:{arg0.buildIndex}   ");
        Debug.Log(info);
    }

    private void OnDestroy()
    {
        SceneManager.sceneLoaded -= SceneManager_sceneLoaded;
    }
复制代码

 

posted @   过往云烟吧  阅读(302)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示