SteamVR2.X中VR场景的过渡

在开发VR游戏的时候,经常用到的就是场景之间跳转的过渡了,之前未了解到SteamVR中有这个功能的时候,都是自己通过一个空的过渡场景配合协程实现。附上我自己框架里面的关卡管理器脚本:

/****************************************************
    文件:LevelManag.cs
	作者:Paul   邮箱: 794451358@qq.com
    日期:2019/9/18 12:20:26
	功能:关卡管理器
*****************************************************/

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

namespace PFarmeWork
{
    /// <summary>
    /// 关卡(场景)管理器,2021/3/5更改为单例模式
    /// </summary>
    public class LevelManager : MonoSingleton<LevelManager>
    {
        /// <summary>
        /// 存储场景的列表,当使用顺序加载时需要赋值
        /// </summary>
        private List<string> mLevelNames;

        private AsyncOperation m_AsyncOperation = null;
        private bool m_IsLoad = false;
        private Coroutine m_LoadCoroutine = null;
        /// <summary>
        /// 顺序加载时的标号
        /// </summary>
        public static int Index { get; set; }

        /// <summary>
        /// 顺序加载的场景存储列表初始化
        /// </summary>
        /// <param name="levelNames">场景存储列表</param>
        public  void AddSceneToList(List<string> levelNames)
        {
            mLevelNames = levelNames;
            Index = 0;
        }
        /// <summary>
        /// 重新加载当前关卡
        /// </summary>
        public  void LoadCurrent()
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().name);
        }
        /// <summary>
        /// 顺序加载下一个场景
        /// </summary>
        public  void LoadNext()
        {
            Index++;
            //容错处理
            if (Index >= mLevelNames.Count)
            {
                Index = 0;
            }
            SceneManager.LoadScene(mLevelNames[Index]);
        }
        /// <summary>
        /// 同步加载场景(用于加载中转场景)
        /// </summary>
        /// <param name="name">场景名字</param>
        public  void LoadSceneByName(string name)
        {
            if (!string.IsNullOrEmpty(name))
            {
                SceneManager.LoadScene(name);
            }
            else
            {
                Debug.LogError("场景名字不能为空!");
            }
        }
        /// <summary>
        /// 异步加载场景
        /// </summary>
        /// <param name="name">用于加载普通场景</param>
        /// <param name="showLoadProcess">显示场景加载进度的回调</param>
        public  void LoadSceneByNameAsync(string name, Action<string> showLoadProcess = null)
        {
            if (!string.IsNullOrEmpty(name))
            {

                m_LoadCoroutine = StartCoroutine(LoadAsync(name, showLoadProcess));
            }
            else
            {
                Debug.LogError("场景名字不能为空!");
            }
        }
        IEnumerator LoadAsync(string name, Action<string> cb)
        {
            int startProcess = -1;
            int endProcess = 100;
            while (startProcess < endProcess)
            {
                startProcess++;
                cb?.Invoke(startProcess.ToString());
                if (!m_IsLoad)
                {
                    m_AsyncOperation = SceneManager.LoadSceneAsync(name);
                    m_AsyncOperation.allowSceneActivation = false;
                    m_IsLoad = true;
                }
                yield return new WaitForEndOfFrame();
                if (startProcess == 100)
                {
                    m_AsyncOperation.allowSceneActivation = true;
                    StopCoroutine(m_LoadCoroutine);
                }

            }
        }

    }

}

后来在学习unity 中国官方的学习网站里面的课程SteamVR2.X的交互开发指南中,知道了SteamVR中有一个脚本可以实现这个功能,并且封装得十分好用。

场景过渡

使用SteamVR_LoadLevel

这个组件是用给定的天空盒六面图替换掉SteamVR的默认环境

在使用这个脚本进行宣传图片呈现时,如果是PNG格式的,要勾选Alpha Is Transparency。Compression要选为None

拖入进度条的背景和填充图片

Loading Screen Width In Meter:3

Progress Bar Width In Meter :1

Loading Screen Distance : 0(无限远)

Loading Screen Transform 和Progress Bar Transform可以在场景中灵活设置后,赋值

Post Load Settle Time :5 (场景等待时间)

给有相同需求的同学参考一下~

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

int_Paul

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值