切换场景与进度条加载的实现

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

首先,先写一个场景跳转管理器来管理跳转到哪个场景去

public class SceneCtrl : Singleton<SceneCtrl>
{
        //记录当前场景
	public SceneType sceneType
    {
        get;
        private set;
    }

    //加载到登录场景
    public void LoadToLogScene()
    {
        Application.LoadLevel("GameLoading");
        sceneType = SceneType.ToLogScene;
    }
    //加载到选择角色场景
    public void LoadToSelectScene()
    {
        Application.LoadLevel("GameLoading");
        sceneType = SceneType.ToSelectRole;
    }
    //加载到主城场景
    public void LoadToCityScene()
    {
        Application.LoadLevel("GameLoading");
        sceneType = SceneType.ToCityScene;
    }
    //加载到游戏场景
    public void LoadToGameScene()
    {
        Application.LoadLevel("GameLoading");
        sceneType = SceneType.ToGameScene;
    }
}

加载场景控制器通过协程切换场景

public class UILoadOnCtrl : MonoBehaviour
{
    //场景控制器
    [SerializeField]
    private UILoadOnView m_Loading;
    private AsyncOperation m_Async;
    //当前进度
    private float m_CruuentProgess;
    private void Start()
    {
        StartCoroutine(Loading());
        if (m_Loading==null)
        {
            m_Loading = GetComponent<UILoadOnView>();
        }
    }

    IEnumerator Loading()
    {
        string str = string.Empty;
        switch (SceneCtrl.Instance.sceneType)
        {
            case SceneType.ToLogScene:
                str = "GameLog";
                break;
            case SceneType.ToCityScene:
                str = "GameCity";
                break;
            case SceneType.ToGameScene:
                str = "GameScene_ShanGu";
                break;
            case SceneType.ToSelectRole:
                str = "Scene_SelectRole";
                break;
            default:
                break;
        }
        m_Async = Application.LoadLevelAsync(str);
        m_Async.allowSceneActivation = false;
        yield return m_Async;
    }

    private void Update()
    {
        int CurrentPro = 0;
        if (m_Async.progress<0.9f)
        {
            CurrentPro = Mathf.Clamp((int)m_Async.progress*100,1,100);
        }
        else
        {
            CurrentPro = 100;
        }
        if (m_CruuentProgess<CurrentPro)
        {
            m_CruuentProgess++;
        }
        else
        {
            m_Async.allowSceneActivation = true;
        }
        m_Loading.SetPregess(m_CruuentProgess*0.01f);
    }
}
加载场景进度条设置
public class UILoadOnView : UISceneBaseView
{
    //进度条
    [SerializeField]
    private Slider m_Slider;
    //进度数字
    [SerializeField]
    private Text m_Text;

    //设置进度条的值
    public void SetPregess(float value)
    {
        m_Slider.value = value;
        m_Text.text = string.Format("{0}%",(int)(value*100));
    }
}

Unity场景切换实战:UGUI异步加载进度条实现 在Unity游戏开发中,场景管理是构建流畅用户体验的核心技术之一。其原理基于异步资源加载UI事件驱动,通过协程控制加载流程,避免主线程阻塞。这项技术的价值在于提升应用响应性,实现无缝的场景过渡,是游戏和交互应用的基础架构。常见的应用场景包括游戏关卡切换、菜单界面跳转以及大型应用的模块加载。本文聚焦于Unity UGUI系统,详细解析如何通过事件绑定、异步加载协程和进度条UI,构建一个健壮的场景切换系统,其中异步加载和协程是实现平滑过渡的关键技术点。 阅读详情

相关推荐

Godot异步场景加载实战:告别卡顿,实现流畅进度条切换

在游戏开发中,资源加载是影响用户体验的关键环节。同步加载会阻塞主线程,导致游戏卡顿,破坏沉浸感。异步加载技术通过将资源读取任务移至后台线程,保障了主线程的流畅运行,其核心价值在于实现无缝的场景切换实时的进度反馈。Godot引擎内置的ResourceLoader提供了两种异步加载方式,其中load_interactive方法因其支持分步轮询精确进度获取,成为实现可视化进度条的理想选择。通过构建职责分离的加载管理器、UI反馈层流程控制器,开发者可以打造出响应迅速、反馈明确的加载体验,有效应用于各类游戏场景

weixin_34015336的博客 453

Unity3D 场景切换加载进度条实现

在 Unity3D 中切换场景时,我们可以使用 Addressables 来管理场景资源,并结合加载进度条来提供更好的用户体验。创建两个场景,一个是当前场景(例如 MainScene),另一个是要切换的目标场景(例如 TargetScene)。通过以上步骤,我们成功实现了使用 Addressables 切换场景,并在加载过程中显示加载进度条的功能。在 Unity 编辑器中,选择当前场景(MainScene),点击播放按钮进行预览。当点击切换场景按钮时,将会显示加载进度条,并在加载完成后切换到目标场景

DiAngular的博客 608

unity多个场景切换保存数据_Unity实现进度条场景切换功能

using UnityEngine;using UnityEngine.SceneManagement;using UnityEngine.UI;namespace Scenes.s.StatePattern.RealSample{public class SceneStateController{private ISceneState m_State;private bool m_bRunBeg...

weixin_39968852的博客 551

项目记录34--tolua 框架 场景管理BaseScene

场景管理主要是资源的释放比较重要。不多说看代码。我设想是每个场景也算是一个模块通过事件通信。BaseScene主要做的事情是进入场景,退出场景(场景动画)释放资源。 --为了扩展 --[[  * 创建人   : 星华 场景跳转设想:0.跳转场景 1.加载场景需要的资源 2.释放场景资源   。。。 ]] local BaseScene = class("BaseScen

u010665359的专栏 1992

Unity Tolua# & Ulua & LuaFramework 热更新框架的入门,小白跟着做一遍就懂了

这个人也是小白,不对的地方请指出他好更改。 1.热更新是干什么用的?        我们拿Android手机的APP为例,假如一个一二十M的APP更新了版本,一般是叫用户重新下载一个最新版本的APK文件重新安装。                                                                                 但是我们手机游戏客户...

u013617851的博客 1万+

【Unity】虚拟现实 VRTK插件使用教程(六)VR UI (UGUI和VRTK的事件处理机制)

文章目录UI2D UI UI UI通常按类别分为三种,即2D UI、3D UI、模型UI。 2D UI:2D UI固定在屏幕上,不会跟着角色移动而移动。 3D UI:3D UI放在场景世界中,当相机移动到UI前面才能看到。 模型UI: 2D UI 要使用2D UI就要先创建一个画布Canvas,画布的渲染类型通常可以设置为: Screen Space - Overlay(2D) Screen Space - Camera(2D) World Space(3D) 在VR游戏中,如果想要2D UI

一个普普通通的游戏开发者 7819

快速开发实用工具VRTK-001:005

DEMO 1 场景切换、简单获取手柄并监控按钮 第一个场景001_CameraRig_VRPlayArea,它的功能是按下手柄任意键切换到下一个场景。你需要做的准备工作是准备好切换的下一个场景,也就是要先创景一个场景,然后在场景中添加VRTK的VR摄像机和SceneChanger脚本。这里说一点,当前版本的VRTK的prefabs包里没有拉出来就可以用的VR摄像头,要自己做,先创建一个gameObject,改名为VRTK_SDKManager,然后添加VRTK_SDKManager脚本,然后添加预置物SD

GIS探索之路 956

VRTK重新激活场景 跳转场景 手柄UI交互功能丢失问题

VRTK跳转场景重新激活场景手柄UI功能交互丢失解决方法

weixin_42746271的博客 2653

Unity使用进度条加载实现场景切换(简单方法)

Unity使用进度条加载实现场景切换(简单方法)

weixin_56166431的博客 2243

Unity3D 场景切换加载进度条实现

需要三个场景场景A,场景B,场景C; 场景A:一个按钮,点击加载场景B; 场景B:从A切换到C过度场景加载进度条场景C:目标场景; 创建OnProgress.cs脚本: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Scen...

weixin_34197488的博客 991

Unity异步场景切换终极指南:实现流畅的加载界面进度条动画同步

UniTask是一个专为Unity设计的强大异步编程库,它提供了高效的零分配async/await集成方案。在Unity游戏开发中,异步场景切换加载界面的进度条动画同步是提升用户体验的关键技术。本文将深入探讨如何使用UniTask实现这一功能。 ## 为什么需要异步场景切换? 在传统Unity开发中,场景切换往往会导致游戏卡顿,影响用户体验。通过异步加载技术,我们可以在后台加载场景的同时,

gitblog_00994的博客 367

手把手教会你Unity场景切换进度条制作

手把手教会你Unity场景切换进度条的制作

weixin_45375968的博客 1万+

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

前言: 玩游戏最讨厌的是什么呢?当然是游戏加载界面啦 但是你知道吗,加载界面在游戏制作中是不可或缺的,它可以使我们的场景完全加载完毕后再进入游戏,确保用户不会出现加载卡顿的情况。 如何实现一个简易的加载界面呢?来跟我学习一下吧 效果图 UI创建: 首先创建一个开始界面,为Button按钮添加事件来完成场景的转换: 然后创建一个加载界面的UI,首先需要的呢就是一个游戏进度条,可以直接使用Slider来完成创建,其UI层级关系为: 其元素作用为: Background:即整个进度条的背景为棕色 .

xinzhilinger的博客 2万+

unity之场景异步加载进度条制作

加载游戏场景 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class LoadGame : MonoBehaviour { ...

Csoap2的博客 1658

【Unity小帮手】协程实现异步加载场景

使用协程的方式实现异步加载场景,极为简单的方式。

伯恩的博客 5794

三步搞定Unity异步加载场景

加载场景的功能想必在游戏开发中是十分常见的了。如果想从一个场景过渡到另一个包含资源较多的场景,必然需要等待一段时间,这时候就需要有一个滑动条来动态显示加载进度了。本案例提到三个场景:A(原始的场景)、B(加载场景)和C(想要切换到的场景)。当然,很多时候B场景是和A场景是合并的。 1.先写一个全局类,记录当前要切换场景的名称 public class Globe { public...

qq_35037137的博客 4877

unity异步加载场景过度场景进度条

unity异步加载场景过度场景进度条 有A,B两个场景 还有一个Load过度场景 A场景里面有一个Button B场景也有一个Button 点击A场景的Button先出现过度场景进度条 然后进入到B场景 点击B场景的Button出现过度场景进度条 然后进入到A场景 首先新建一个过度场景 过度场景很简单 里面只需要有一个进度条 也就是UGUI的Slider 还...

weixin_43130595的博客 2712

Cocos2dx学习笔记12:cocos2dx进度条(ProgressTimer)

在游戏开发中,我们通常需要做一个游戏的进度条来过渡游戏的场景切换或者显示游戏资源的加载进度。同样的来说,进度条可以在角色扮演游戏中作为玩家或者怪物头顶的生命条,或者消除类休闲游戏的倒计时等。进度条多种多样,如何合理的使用根据游戏的项目需求而定。在cocos2dx中,进度条使用 ProgressTimer 来实现,首先要定义精灵绑定进度条。打开我们创建的项目cocosxuexi...

weixin_34341229的博客 258

Godot-demo-projects异步场景加载进度条加载动画实现

你是否还在为Godot项目中场景切换时的卡顿烦恼?当玩家点击"新游戏"后,长时间的黑屏或冻结足以让50%的用户流失。本文将基于官方demo的最佳实践,手把手教你实现进度条加载动画的异步场景加载系统,让场景切换如丝般顺滑。 读完本文你将掌握: - 3种异步加载API的底层实现原理 - 精确到百分比的进度条渲染技术 - 加载动画主线程的同步机制 - 内存优化错误处理的实战方案...

gitblog_00638的博客 866
上一篇: UI登录与注册功能实现,基于UGUI
下一篇: C++编写加水印源码
jelly洁
博客等级 码龄9年 9粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值