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 @ 2022-06-24 09:43  过往云烟吧  阅读(379)  评论(0)    收藏  举报