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

文字加载场景切换
挂到摄象机上,拖入文本,此文本用于显示加载文本的位置,实际显示内容位文中文本,正在加载中时显示:夏目正在努力加载哦…,加载完成后显示: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组件:
unity登录界面和场景异步加载多种方式
编写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场景中的一个物体上
unity登录界面和场景异步加载多种方式
unity登录界面和场景异步加载多种方式
同时设置Button组件上的点击事件:
把刚刚挂载了account脚本的物体拖拽到On Click()上面选择OnBtton()方法就可以了。
我们来运行一下:
在账号出输入:123,密码输入:1234(设置密码为不可见的方法把密码文本框的属性Content Type的值改为:password,这时你在输入密码就会出现****了!)
————————————————
unity登录界面和场景异步加载多种方式
与我们在脚本中的账号密码不符合所以提示登录失败了。
我们在试一下输入正确的账号与密码,看它会不会跳到loadui场景

登录转自本站小殇莲

上一篇:[2021.10.25]<呆头熊的开发日记>UI界面&场景切换


下一篇:C#中通过名字获取类型