当前位置: 首页 > article >正文

Unity 场景切换

Unity场景切换可使用以下方法:

1、SceneManager.LoadScene()方法:

using UnityEngine.SceneManagement;

// 切换到Scene2场景
SceneManager.LoadScene("Scene2");

2、使用SceneManager.LoadSceneAsync()方法异步加载场景,异步加载我们还可以设置进度条:

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;

public class SceneLoader : MonoBehaviour
{
    public Image progressImg; // 进度条UI元素
    public TextMeshProUGUI progressText; // 百分比文本元素

    private void Start()
    {
       
    }

    private IEnumerator LoadSceneAsync(string name)
    {
        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(name);

        // 禁止场景在加载完成后自动切换
        asyncOperation.allowSceneActivation = false;

        while (!asyncOperation.isDone)
        {
            // 更新进度条的值
            float progress = Mathf.Clamp01(asyncOperation.progress / 0.9f); // 0.9是加载完成时的进度
            progressImg.fillAmount = progress;

            // 更新百分比文本
            int percentage = Mathf.RoundToInt(progress * 100);
            progressText.text = percentage.ToString() + "%";

            // 如果进度达到90%,允许场景切换
            if (progress >= 0.9f)
            {
                //因为在加载完成时,asyncOperation.progress的值可能不会达到100%,因此我们使用0.9作为阈值来判断加载是否完成。
                asyncOperation.allowSceneActivation = true;
            }

            //此处暂停一帧,等待进度条更新完成后进行渲染
            yield return null;
        }
    }


    // 启动异步加载场景的协程
    public void LoadAnotherScene(string name)
    {
        StartCoroutine(LoadSceneAsync(name));
    }
}

这里,我通过一个Image设置进度条,并加一个Text记录进度百分比,并写了个方法调用切换场景方法。我模拟的场景效果如下:

无论使用何种方法,我们都要在Build Setting中把场景加进去。

当我们使用上面两个方法切换场景,其中的参数就是进入这里查询,只有这里有参数对应的场景才能正常切换,此外参数除了用场景名,也可以用上图中场景添加的顺序值,如0,1...作为参数代替场景名参数。


http://www.kler.cn/a/146753.html

相关文章:

  • 《零基础Go语言算法实战》【题目 2-30】并发安全问题
  • 使用docker-compose安装Redis的主从+哨兵模式
  • SQL面试题1:连续登陆问题
  • Node.js - HTTP
  • WeakAuras NES Script(lua)
  • 【2024年华为OD机试】(C卷,100分)- 分割均衡字符串 (Java JS PythonC/C++)
  • 【Java数据结构 -- 包装类和泛型】
  • 【教学类-06-11】20231126 X-Y数字分合-合-下空中
  • 常用数据存储格式介绍:Excel、CSV、JSON、XML
  • 从1500万行的表中删除数据,但要保留4万行,如何处理?
  • Redis深入理解-三次握手、槽位机制
  • QMenu 是 Qt 框架中的一个类,用于创建和管理弹出式菜单
  • 231127 刷题日报
  • 自定义的AlphaShape类来提取平面点云数据的边界点 open3d c++ 代码 平面点云边界提取算法
  • B 树和 B+树 的区别
  • MidJourney笔记(4)-settings
  • C#,《小白学程序》第八课:列表(List)其二,编制《高铁列车时刻表》与时间DateTime
  • 基于单片机病房呼叫程序和仿真
  • innovus如何在floorplan view显示所有module
  • 每日一题:LeetCode-202.快乐数(一点都不快乐)
  • 经典的回溯算法题leetcode组合问题整理及思路代码详解
  • GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF
  • 【斗破年番】萧炎斩杀蝎山,活捉魂殿铁护法,救小医仙身中魔斑毒
  • apple macbook M系列芯片安装 openJDK17
  • github访问失败
  • Unsupervised MVS论文笔记(2019年)