Unity3D_(API)场景切换SceneManager

 

 

  Unity场景切换SceneManager  官方文档:传送门

 

 

静态方法

  创建场景

  CreateScene   Create an empty new Scene at runtime with the given name.
 
  得到当前激活的场景
  GetActiveScene   Gets the currently active Scene.
 
  根据index得到一个场景
  GetSceneAt   Get the Scene at index in the SceneManager's list of loaded Scenes.
 
  通过BuildIndex得到一个场景
  GetSceneByBuildIndex   Get a Scene struct from a build index.
 
  通过名字得到一个场景
  GetSceneByName   Searches through the Scenes loaded for a Scene with the given name.
  
  通过路径得到一个场景
  GetSceneByPath   Searches all Scenes loaded for a Scene that has the given asset path.
 
  加载场景
  LoadScene   Loads the Scene by its name or index in Build Settings.
 
  异步加载场景
  LoadSceneAsync   Loads the Scene asynchronously in the background.
 
  合并两个场景
  MergeScenes  This will merge the source Scene into the destinationScene.
 
  把某个游戏物体移动到场景当中
  MoveGameObjectToScene   Move a GameObject from its current Scene to a new Scene.
 
  激活某个场景
  SetActiveScene   Set the Scene to be active.
 
  异步卸载某个场景
  UnloadSceneAsync   Destroys all GameObjects associated with the given Scene and removes the Scene from the SceneManager
 
 
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Scene_Gary : MonoBehaviour {

    // Use this for initialization
    void Start () {
        //获得当前场景中的数量
        print(SceneManager.sceneCount);
        //获得BuildSettings中的名字
        print(SceneManager.sceneCountInBuildSettings);

        //获得当前激活场景名字
        print(SceneManager.GetActiveScene().name);
        print(SceneManager.GetSceneAt(0).name);

        SceneManager.activeSceneChanged += OnActiveSceneChanged;
        SceneManager.sceneLoaded += OnSceneLoaded;
    }

    void OnActiveSceneChanged(Scene a, Scene b)
    {
        print(a.name);
        print(b.name);
    }

    void OnSceneLoaded(Scene a ,LoadSceneMode mode)
    {
        print(a.name+" "+mode);
    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //SceneManager.LoadScene(0);
            SceneManager.LoadScene(SceneManager.GetSceneByBuildIndex(0).name);
        }
    }
}
Scene_Gary.cs

 

     //获得当前场景中的数量
        print(SceneManager.sceneCount);
        //获得BuildSettings中的名字
        print(SceneManager.sceneCountInBuildSettings);

        //获得当前激活场景名字
        print(SceneManager.GetActiveScene().name);
        print(SceneManager.GetSceneAt(0).name);

        SceneManager.activeSceneChanged += OnActiveSceneChanged;
        SceneManager.sceneLoaded += OnSceneLoaded;
 
    void OnActiveSceneChanged(Scene a, Scene b)
    {
        print(a.name);
        print(b.name);
    }

    void OnSceneLoaded(Scene a ,LoadSceneMode mode)
    {
        print(a.name+" "+mode);
    }
  

  
//重新加载场景   //SceneManager.LoadScene(0);   SceneManager.LoadScene(SceneManager.GetSceneByBuildIndex(0).name);

 

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

public class Scene_Gary : MonoBehaviour {

    // Use this for initialization
    void Start () {
        SceneManager.sceneLoaded += this.OnSceneLoader;
    }

    //当场景加载出来调用触发的事件
    void OnSceneLoader(Scene scene,LoadSceneMode mode)
    {
        Debug.Log("Hello Gary~");
    }
        
    // Update is called once per frame
    void Update () {
        //加载场景
        SceneManager.LoadScene("Gary2");
        //获得当前场景
        Scene scene = SceneManager.GetActiveScene();
        //重新加载当前场景
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}
Scene_Gary.cs

 

    void Start () {
        //将OnSceneLoader()方法添加到场景管理类
        SceneManager.sceneLoaded += this.OnSceneLoader;
    }

    //当场景加载出来调用触发的事件
    void OnSceneLoader(Scene scene,LoadSceneMode mode)
    {
        Debug.Log("Hello Gary~");
    }

 

 
 
CreateSceneCreate an empty new Scene at runtime with the given name.
GetActiveSceneGets the currently active Scene.
GetSceneAtGet the Scene at index in the SceneManager's list of loaded Scenes.
GetSceneByBuildIndexGet a Scene struct from a build index.
GetSceneByNameSearches through the Scenes loaded for a Scene with the given name.
GetSceneByPathSearches all Scenes loaded for a Scene that has the given asset path.
LoadSceneLoads the Scene by its name or index in Build Settings.
LoadSceneAsyncLoads the Scene asynchronously in the background.
MergeScenesThis will merge the source Scene into the destinationScene.
MoveGameObjectToSceneMove a GameObject from its current Scene to a new Scene.
SetActiveSceneSet the Scene to be active.
UnloadSceneAsyncDestroys all GameObjects associated with the given Scene and removes the Scene from the SceneManager.

 

场景构建

  File->Build Settings

  将场景放到Scenes In Build中,默认第一个场景index下标是0

 

  按下空格,加载下标为0的场景(Gary.scene)

  通过OnSceneLoader()方法,触发加载场景触发的事件

 

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

public class Scene_Gary : MonoBehaviour {

    // Use this for initialization
    void Start () {
        //将OnSceneLoader()方法添加到场景管理类
        SceneManager.sceneLoaded += this.OnSceneLoader;
    }

    //当场景加载出来调用触发的事件
    void OnSceneLoader(Scene scene,LoadSceneMode mode)
    {
        Debug.Log("Hello Gary~");
    }
        
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            SceneManager.LoadScene(0);
        }
    }
}
Scene_Gary.cs

 

转载于:https://www.cnblogs.com/1138720556Gary/p/9942088.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值