IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity_加载页面及进度条 -> 正文阅读

[游戏开发]Unity_加载页面及进度条

就是其他主页点击按钮后先跳转到这个加载页面场景, 同时异步加载要跳转到的场景

参考:Unity SceneManager场景管理Chinar详解API

Unity 场景异步加载(加载界面的实现)


新建一个加载页面场景

创建一个滑动条用来表示进度条

?

再创建一个文本用来显示进度百分比

?位置随便摆一下

创建一个空对象

在空对象上新建挂载脚本

?

修改代码:

/*加载场景页面*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.UI;
using UnityEngine.SceneManagement;//场景管理

public class Load_test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        LoadNextLeaver();//开启协程(多线程?)
    }

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

    public GameObject image;   //加载界面
    public Slider slider;   //进度条
    public Text text;      //加载进度文本

    public void LoadNextLeaver()
    {
        image.SetActive(true);
        StartCoroutine(LoadLeaver());
    }
    IEnumerator LoadLeaver()
    {
        AsyncOperation operation = SceneManager.LoadSceneAsync(2); //准备加载序号为2的场景
        operation.allowSceneActivation = true;//加载完成后,是否允许场景跳转
        while (!operation.isDone)   //当场景没有加载完毕
        {
            slider.value = operation.progress;  //进度条与场景加载进度对应
            text.text = (operation.progress * 100).ToString() + "%";
            yield return null;
        }
    }
}



?运行测试,可以实现跳转和进度条


但目标场景太小了,瞬间闪一下就加载完了,就很出戏?

一个伪加载实现:

参考:Unity协程实现伪加载页面

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

using UnityEngine.UI;

public class Load_test_ : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

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

    /// <summary>
    /// 进度条下方显示的文本
    /// </summary>
    [SerializeField]
    Text Aegis_text;
    /// <summary>
    /// 进度条
    /// </summary>
    [SerializeField]
    Slider slider;
    /// <summary>
    /// 文字后方点数显示
    /// </summary>
    float pointCount;
    /// <summary>
    /// 当前进度
    /// </summary>
    float progress = 0;
    /// <summary>
    /// 进度条读取完成时间
    /// </summary>
    float total_time = 3f;
    /// <summary>
    /// 计时器
    /// </summary>
    float time = 0;
    void OnEnable()
    {
        //开启协程
        StartCoroutine("AegisAnimation");
    }
    void Update()
    {
        //记录时间增量
        time += Time.deltaTime;
        //当前进度随着时间改变的百分比
        progress = time / total_time;
        if (progress >= 1)
        {
            UnityEngine.SceneManagement.SceneManager.LoadScene(2);//假装的加载完成后,还是要跳转到目标场景
            return;
        }
        //把进度赋给进度条的值
        slider.value = progress;
    }
    void OnDisable()
    {
        //关闭协程
        StopCoroutine("AegisAnimation");
    }
    /// <summary>
    /// 文本显示协程
    /// </summary>
    /// <returns></returns>
    IEnumerator AegisAnimation()
    {

        while (true)
        {
            yield return new WaitForSeconds(0.1f);
            float f = slider.value;
            //设置进度条的value值在某个区间的时候要显示的字符串
            string reminder = "";
            if (f < 0.25f)
            {
                reminder = "检测余额中...";
            }
            else if (f < 0.5f)
            {
                reminder = "注入木马中...";
            }
            else if (f < 0.75f)
            {
                reminder = "破解密码中...";
            }
            else
            {
                reminder = "上传数据中...";
            }
            //显示字符串后面的“.”
            pointCount++;
            if (pointCount == 7)
            {
                pointCount = 0;
            }
            for (int i = 0; i < pointCount; i++)
            {
                reminder += ".";
            }
            //把显示内容赋给场景中的text
            Aegis_text.text = reminder;
        }
    }
}

测试效果

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 11:09:28  更:2021-07-23 11:11:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/24 6:56:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码