Unity-场景

发布时间:2024年01月18日

创建场景

创建新的场景后:
文件 -> 生成设置 -> Build中的场景 -> 将项目中需要使用的场景拖进去

build场景

SceneTest

public class SceneTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        // 两个类: 场景类、场景管理类
        // 场景类
        // 获取当前场景
        Scene scene = SceneManager.GetActiveScene();
        //      场景名称
        Debug.Log(scene.name);
        //      场景是否已经加载
        Debug.Log(scene.isLoaded);
        //      场景路径
        Debug.Log(scene.path);
        //      场景在(build中的场景)中的索引号
        Debug.Log(scene.buildIndex);
        //      获取场景中的所有物体(不包括子物体)
        GameObject[] gos = scene.GetRootGameObjects();
        Debug.Log(gos.Length);
        
        // 场景管理类
        // 【场景加载】 场景同步加载,使用在(build中的场景)中的索引号加载
        SceneManager.LoadScene(1);
        // 【场景加载】 使用场景名称加载
        SceneManager.LoadScene("MyScene");
        // 【场景加载】 单一场景加载, 加载后只存在一个场景
        SceneManager.LoadScene("MyScene", LoadSceneMode.Single);
        // 【场景加载】 融合场景加载,加载后与之前场景重叠在一起, 但如果场景多会卡顿,要使用异步加载
        SceneManager.LoadScene("MyScene", LoadSceneMode.Additive);
        // 【创建场景】创建新的场景
        Scene newScene = SceneManager.CreateScene("NewScene");
        // 【场景数量】当前已经加载的场景数量
        Debug.Log(SceneManager.sceneCount);
        // 【卸载场景】场景异步销毁
        SceneManager.UnloadSceneAsync(newScene);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

场景异步加载----协程

AsyncTest

public class AsyncTest : MonoBehaviour
{
    private AsyncOperation operation;
    private float timer = 0;
    void Start()
    {
        // 【调用协程】 使用该函数来使用协程
        StartCoroutine(loadScene());
    }

    // 【协程】 使用协程方法来异步加载场景
    IEnumerator loadScene(){
        // 异步加载场景,使用索引号
        operation = SceneManager.LoadSceneAsync(1);
        // 加载完成场景后不会自动跳转, 可自己加计时器来控制跳转
        operation.allowSceneActivation = false;
        
        yield return operation;
    }
    
    
    void Update()
    {
        // 【加载进度】 输出加载进度(0-0.9) 
        Debug.Log(operation.progress);
        // 使用计时器来控制场景跳转, 5秒后跳转
        timer += Time.deltaTime;
        if (timer > 5)
        {
            operation.allowSceneActivation = true;
        }
    }
}

文章来源:https://blog.csdn.net/qq_44897391/article/details/135665183
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。