unity登录界面和场景异步加载多种方式

2023-11-08

文字加载场景切换
挂到摄象机上,拖入文本,此文本用于显示加载文本的位置,实际显示内容位文中文本,正在加载中时显示:夏目正在努力加载哦…,加载完成后显示:ok,

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

public class LoadScene : MonoBehaviour
{
    public Text loadingText;
    public Image progressBar;
    private int curProgressValue = 0;
    
    void FixedUpdate()
    {
        int progressValue = 100;

        if (curProgressValue < progressValue)
        {
            curProgressValue++;
        }

        loadingText.text = "夏目正在努力加载哦..." + curProgressValue + "%";//实时更新进度百分比的文本显示  
//文字为加载中显示,自由更换
        progressBar.fillAmount = curProgressValue / 100f;//实时更新滑动进度图片的fillAmount值  

        if (curProgressValue == 100)
        {
            loadingText.text = "OK";//加载完成文本显示OK随意更换
            SceneManager.LoadScene("Menu");//要切换的场景
        }
    }
}

下面是进度条加载

            this.GetComponent<Button>().onClick.AddListener(() => {
                //场景跳转,设置Loading加载界面为可见
                this.transform.parent.parent.Find("Loading").gameObject.SetActive(true);
            });

将此代码挂在子物体含进度条的物体上

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

/*
SmallGame
时间:2017.8.12
作者:烧仙草奶茶
*/
/// <summary>
/// 加载场景 —— 脚本挂载前场景
/// </summary>
public class LoadScene : MonoBehaviour
{
    private Slider slider;          //滑动条
    int currentProgress; //当前进度
    int targetProgress;  //目标进度
    public int number=1;

    private void Start()
    {
        currentProgress = 0;
        targetProgress = 0;
        slider = GameObject.Find("Slider").GetComponent<Slider>();
        StartCoroutine(LoadingScene()); //开启协成
    }


    /// <summary>
    /// 异步加载场景
    /// </summary>
    /// <returns>协成</returns>
    private IEnumerator LoadingScene()
    {
        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(number); //异步加载1号场景
        asyncOperation.allowSceneActivation = false;                          //不允许场景立即激活//异步进度在 allowSceneActivation= false时,会卡在0.89999的一个值,这里乘以100转整形
        while (asyncOperation.progress < 0.9f)                                //当异步加载小于0.9f的时候
        {
            targetProgress = (int)(asyncOperation.progress * 100); //异步进度在 allowSceneActivation= false时,会卡在0.89999的一个值,这里乘以100转整形
            yield return LoadProgress();
        }
        targetProgress = 100; //循环后,当前进度已经为90了,所以需要设置目标进度到100;继续循环
        yield return LoadProgress();
        asyncOperation.allowSceneActivation = true; //加载完毕,这里激活场景 —— 跳转场景成功
    }


    /// <summary>
    /// 由于需要两次调用,在这里进行简单封装
    /// </summary>
    /// <returns>等一帧</returns>
    private IEnumerator<WaitForEndOfFrame> LoadProgress()
    {
        while (currentProgress < targetProgress) //当前进度 < 目标进度时
        {
            //++currentProgress;
            currentProgress+=5;
            //当前进度不断累加 (Chinar温馨提示,如果场景很小,可以调整这里的值 例如:+=10 +=20,来调节加载速度)
            slider.value = (float)currentProgress / 100; //给UI进度条赋值
            yield return new WaitForEndOfFrame();         //等一帧
        }
    }
}

下面是登录界面,请无视下面的加载,只看登录
首先介绍一下要用到的几个组件:
1、InputField组件(输入框)
2、Button组件(按钮)
3、Slider组件(进度条)
接下来开始实际操作登录界面和加载界面的制作过程
首先我们准备三个场景
分别命名为:logo、loadui和mian
1、在logo场景中添加两个InputField组件和一个Button组件:
在这里插入图片描述
编写account代码:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class account : MonoBehaviour
{
    //定义账号文本框
    public InputField accountInput;
    //定义密码文本框
    public InputField passwordInput;
    //定义登录成功提示
    public GameObject yes;
    //定义登录失败提示
    public GameObject no;
    //自定义OnBtton方法
    public void OnBtton()
    {
        //accountNumber用于接收账号文本框中的内容
        string accountNumber = accountInput.text;
        //passwordNumber用于接收密码文本框中的内容
        string passwordNumber = passwordInput.text;
        //判断玩家输入的账号和密码是否正确
        if (accountNumber == "123" && passwordNumber == "123")
        {
            //成功提示
            yes.SetActive(true);
            //加载到loadui场景中去
            SceneManager.LoadSceneAsync("loadui");
            StartCoroutine(Disappear());
        }
        else
        {
            //失败提示
            no.SetActive(true);
            //开启携程
            StartCoroutine(Disappear());
        }
    }
    //定义Disapper携程
    IEnumerator Disappear()
    {
        //等待两秒回调
        yield return new WaitForSeconds(2);
        //关闭成功和失败的提示
        yes.SetActive(false);
        no.SetActive(false);
    }
}

把脚本挂载到logo场景中的一个物体上
在这里插入图片描述
在这里插入图片描述
同时设置Button组件上的点击事件:
把刚刚挂载了account脚本的物体拖拽到On Click()上面选择OnBtton()方法就可以了。
我们来运行一下:
在账号出输入:123,密码输入:1234(设置密码为不可见的方法把密码文本框的属性Content Type的值改为:password,这时你在输入密码就会出现****了!)
————————————————
在这里插入图片描述
与我们在脚本中的账号密码不符合所以提示登录失败了。
我们在试一下输入正确的账号与密码,看它会不会跳到loadui场景

登录转自本站小殇莲

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity登录界面和场景异步加载多种方式 的相关文章

随机推荐

  • 【论文笔记】BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers

    1 介绍 1 1 核心观点 当时的所有的重建目标都是关于低级图像元素的 低估了高级语义 Q 怎么去定义高级和低级语义 1 2 基本流程 VQ KD编码器首先根据可学习码本将输入图像转换为离散令牌 然后 解码器学习重建由教师模型编码的语义特征
  • 前后端获取当前日期

    js直接获取当天时间 标准格式年月日 时分秒 往后推迟时间 则添加 1小时 60 60 1000 new Date new Date 8 3600 1000 toJSON substr 0 19 replace T 后端获取 new Sim
  • git cherry-pick 解决开发分支选错问题

    应用场景 正常开发流程 创建分支并checkout转换为开发分支进行开发 但我在master开发后commit之后意识到了这个问题 重新git pull后并checkout新分支发现代码改动遗失 因为git pull 会把当前分支覆盖 在请
  • Network 【HDU - 3078】【LCA+暴力查询】

    题目链接 你要是真暴力这道题还是要T的 但是 做了剪枝就会过了 我们知道对于LCA每个节点有它自己的深度 在这里 我就将每个节点的深度数组当作了每个节点道最初根节点的距离了 然后 就是剪枝操作饿了 判断是否是可行解的时候用的是dis x d
  • 最新最全的angular4.x、anuglar2、anuglar8入门实战视频教程

    angular4 x视频教程强势来袭 忙碌的工作 不停的充电 好久没遇到这么实用的教程了 跟同行分享一下 写篇文章 放松放松 有好的技术资源的也希望大家多分享 我会关注学习的 angular4 x angular5 x angular8 x
  • 洛谷 P1876 开灯

    题目链接 https www luogu com cn problem P1876 include
  • 图像分析技术大比拼:图像分类、图像识别、目标检测的优缺点分析与算法比较

    计算机视觉是人工智能领域的一个重要分支 它旨在构建能够理解和处理图像 视频等视觉信息的计算机系统 在计算机视觉领域中 图像分类 图像识别和目标检测是三个重要的任务 一 图像分类 图像分类是计算机视觉领域最基础的任务之一 它的目的是将一张图像
  • Linux--高级IO

    高级IO 1 五种IO模型 阻塞IO 在内核将数据准备好之前 系统调用会一直等待 所有的套接字 默认都是阻塞方式 阻塞IO是最常见的IO模型 非阻塞IO 如果内核还未将数据准备好 系统调用仍然会直接返回 并且返回EWOULDBLOCK错误码
  • PyCharm创建virtualenv方法

    Python的版本众多 在加上适用不同版本的Python Package 这导致在同时进行几个项目时 对库的依赖存在很大的问题 这个时候就牵涉到对Python以及依赖库的版本管理 方便进行开发 virtualenv就是用来解决这个问题的 下
  • Kafka 验证部署(单机版)kafka-producer-perf-test.sh 吞吐量测试工具的基本使用

    1 测试topic创建与删除 1 创建一个测试topic 名为test topic 创建3个分区 每个分区分配1个副本 因为是单机kafka 如果是集群的话可以分配多个副本 如果分配的副本数大于broker的数量时 会报错 bin kafk
  • 华为内部面试题库---(14)

    1 关于虚拟地址空间的说法错误的是 A 进程地址空间是用多少分配多少 4G仅仅是最大限额 B 进程的地址空间并不一定对应实际的物理页 C 不同进程的不同虚拟地址可以映射到相同的物理页 D 不同进程的相同虚拟地址不能映射到相同的物理页 解答
  • KNN回归-预测二手车

    KNN是一个典型的分类模型 就时预测类别 例如苹果 香蕉等 预测的结果是 训练集上已经包含的类别 并不会预测出新的类别 二手车价格预测是预测车的价格 是数值 理应按照回归算法来算 怎么用knn来实现回归问题呢 找到最近的K样本之后 我们直接
  • Android - 常见内存泄露问题盘点

    1 内存泄漏的本质 内存泄漏的本质就是对象引用未释放 当对象被创建时 如果没有被正确释放 那么这些对象就会一直占用内存 直到应用程序退出 例如 当一个Activity被销毁时 如果它还持有其他对象的引用 那么这些对象就无法被垃圾回收器回收
  • 层层深入高效地拿下商户收获刷脸红利

    无现金时代已陪伴我们许久 扫码支付给消费者带去诸多便利 正当人们刚刚养成扫码支付消费习惯的时候 刷脸支付这种新的支付方式又来了 两年后 我们或将迎来 无手机 支付时代 刷脸支付将使得消费者拥有更加流畅的支付体验 对商户来说 收款也变得更加高
  • python模块matplotlib.pyplot用法_python – 虽然使用pyplot.show(),但如何使用matplotlib保持图形大小不变?...

    看看下面的python示例 import matplotlib as mpl import matplotlib pyplot as plt mpl rcParams figure figsize 8 27 11 69 fig plt fi
  • Python 数据分析与数据可视化(三)列表、元组、字典、集合与字符串

    文章目录 3 列表 元组 字典 集合与字符串 3 1 列表与列表推导式 3 1 1 创建列表 下标访问 3 1 1 1 简介 3 1 1 2 创建列表 3 1 1 3 使用下标访问列表中的元素 3 1 2 列表常用方法 3 1 2 1 ap
  • 输入身份证号判断性别并求年龄

    include
  • 如何二次封装一个el-table组件并二次复用

    注 示例使用的是vue3和element 进行二次封装的 首先我们来看效果图 总共可以分为以下几个模块 表格数据操作按钮区域 表格信息提示区域 表格主体内容展示区域 表格分页区域 表单搜索没有封装在这里是为了降低代码的耦合性 有兴趣的可以查
  • c# dataGridView 数据合并单元格

    原文地址http sigechuizi cn article 133
  • unity登录界面和场景异步加载多种方式

    文字加载场景切换 挂到摄象机上 拖入文本 此文本用于显示加载文本的位置 实际显示内容位文中文本 正在加载中时显示 夏目正在努力加载哦 加载完成后显示 ok using UnityEngine using System Collections