《VR平院校史馆》的设计与实现
2020-05-18彭伟国李文松
彭伟国 李文松
平顶山学院 计算机学院(软件学院) 河南 平顶山 467000
引言
在平顶山学院60华诞之际,2019年10月平顶山学院(以下简称平院)校史馆正式落成开放。开发一款VR版的平院校史馆,校内外师生和游客可通过网络身临其境的去参观校史馆,是线上展示校情的平台和窗口,以增强师生的集体荣誉感、时代责任感,提升学校的社会美誉度,达到良好的教育宣传效果。
1 项目策划
通过已有校园虚拟漫游项目分析,可知大部分项目在场景上主要呈现的是三维模型、图片、文字等,在交互功能上主要有交互式地图、漫游路线、图片展示、语音解说等。VR平院校史馆在项目策划上,吸取了已有类似项目交互设计的先进经验,将VR项目交互形式分成图文交互、视频观看、语音解说、答题测试、图片消消乐等多种形式,在不失趣味性的前提下,真实还原平院校史馆的实际场景布局。为此,本项目在功能策划上有注册与登录、虚拟漫游、虚拟交互、校史导学、小游戏等。
2 项目实现技术
本项目使用主流的Unity引擎进行开发;用户借助HTC VIVE设备,可以通过戴头盔、拿手柄的方式实现对角色的控制;开发过程中采用单例设计模式,使项目满足“高内聚、低耦合”的需求。本项目的3D场景使用Maya建模软件进行制作,然后使用C#编程语言实现交互功能。
3 项目详细设计
3.1 场景设计
本项目的场景主要由房屋建筑、展板、桌子、灯等一些物品组成。房屋建筑主要是参考现实中的校史馆进行设计,场景总共分为四个部分。第一个部分主要是由一间房子划分开来,中间竖立着平顶山学院的牌子;第二个部分是一个走廊加一个方形的房子,中间竖立一个圆柱,圆柱上面是一个像扇子一样的建筑;第三个部分是一个走廊和一个圆形展台建筑;第四个部分是一个圆形建筑加上一个圆台。
VR校史馆虚拟场景里面有许多展板,分为前言展板、内容展板、后记展板。前言展板主要介绍校徽、校训、校歌、校史的简介;内容展板主要有校史模块、院系模块、党建模块、民主管理、团学活动、学校规划;后记展板主要是回望历史、审视当下和展望未来,全力谱写新时代平顶山学院的绚丽华章。
玩家以虚拟的第一视角的形式,在场景里面游走,手握HTCVIVE手柄、头戴头显设备来操作虚拟人物以达到体验的效果。
3.2 功能设计
依据项目交互功能设计,项目设计了登录注册界面、开始界面、加载界面、视频播放界面、答题界面、消消乐界面、柱状图界面等UI界面。在功能设计上,以面向对象程序设计思想为指导,运用C#语言编写交互脚本,通过类图的形式设计了登录与注册功能、虚拟漫游功能、虚拟交互功能、校史导学功能、小游戏功能等方面。在此,以虚拟交互功能设计为例进行详细阐述。
在虚拟现实系统中,用户与虚拟世界之间要实现自然的交互,必须采用特殊的输入输出设备,用以识别用户的各种信息输入,并实时生成逼真的反馈信息。VR输入设备如动作捕捉、手势识别、声音感知等体感类设备,通过感知用户输入信息,与虚拟世界进行交互,输入设备是实现消费者交互、沉浸感的重要技术[1]。
根据设计,本项目就是要借助HTC VIVE设备来实现这个功能。两个带有按钮和振动反馈的手柄,一个可以看见虚拟场景的头盔,它们会实现用户与虚拟世界的交互。首先就是设备如何使用,怎么才算连接成功,其次是怎么获取手柄的接口,最后就是通过按钮与虚拟世界的交互。
虚拟交互功能是在Control Manage类里面实现,hand变量是指两个手柄,m_pose变量是指手柄的动作,m_Touch变量是指手柄圆盘的位置,类图如图1所示:
图1 虚拟交互功能类图
4 项目详细实现
4.1 场景实现
场景中主要由房子、展台、圆柱、展板、灯等物体组成,对于场景的实现,一是模型的制作、贴图的制作,二是场景的布局(展板的位置、大小等内容)。
根据项目设计总共有四个房间,运用Maya软件先制作出墙体的形状,然后通过复制、移动、压扁、调整位置,制作出房子形状;通过Maya多切割工具和挤压工具形成房顶上的各种形状;然后,创建几个立方体,用来制作展板、展台、摄像头等房屋设施;针对房屋每个部分进行UV操作,保存图片在Photoshop软件里做贴图,然后在Maya里面添加材质;最后,在Maya里将模型导出,格式为fbx,然后将它导入到Unity。
前言展板、内容展板、后记展板制作步骤几乎一样,都是创建Text和Image,并改变其内容和参数。
4.2 功能实现
从VR环境搭建、VR按键和头盔、VR视频播放三方面为例分析本项目功能的实现。
(1)VR环境搭建
HTC VIVE是一款虚拟头盔,是VR虚拟现实交互设备,HTC Vive套件由头戴式显示器(HMD)、两个基站、两个无线操控手柄和一个串流盒构成[2]。VR环境搭建分为两个步骤,第一步骤是SteamVR的导入,第二步骤是Player的设置。
1)SteamVR的导入
从Unity Asset资源商店里导入SteamVR插件;在Unity中将PlayerSetting的设置为OpenVR;打开Window下的SteamVRInput编辑界面,默认的default不用改,Actions 下In则为要输入的事件,out为输出事件;点击In里面的“+”,Name为当前事件的名字,Type为事件的返回值类型,Required目前测试3种选择没有区别,Localized String直接设置为当前事件的名字一样即可;定义一个触摸板触摸事件,类型为boollean,编辑完后点击save and generate按钮就可以把这个事件写入到SteamVR_Input_ActionSet_default_In;点击Open binding UI按钮,进行手柄按键的操作。
2)Player的设置
找到SteamVR示例场景Player,将其拖到场景中即可实现基础的浏览;调整合适大小,然后将其放入场景的第一个地方;选中Player添加相应的代码,对其进行设置;运行场景,如果能够在头盔里面看到场景的话,表示设置成功。
(2)VR手柄按键
1)获取手柄按键的方法是声明一个Hand类型的变量,通过SteamVR_Input.GetStateDown方法获取手柄按键。
2)手柄按键获取后就要检测与场景中UI的交互了,此时向Canvas物体中挂在SteamVRLaserWrapper脚本。
3)SteamVRLaserWrapper脚本主要实现射线与UI的碰撞问题,首先引出OnPointerClick、OnPointerOut、OnPointerIn三个方法,然后连接EventSystem中的检测方法,最后添加到相应的事件上。
(3)VR视频播放
视频播放子功能主要是指用户点击按钮进行视频的播放,它主要把视频渲染到了UI界面上,然后将内容展现给用户。
本功能在PlayVideoOnUGUI类和SliderEvent类里面实现,PlayVideoOnUGUI类和SliderEvent类是依赖关系。PlayVideoOnUGUI类处理是视频加载逻辑,SliderEvent类处理的是进度条逻辑,ShowVideoTime方法处理的是进度条显示视频时间的逻辑,类图如图2所示:
图2 视频播放功能类图
该功能的主要实现,有以下几个步骤:
1)在video组件里挂上PlayVideoOnUGUI脚本并且将相应的Button添加上实践。
2)在PlayVideoOnUGUI类里面,首先将视频渲染到原先定义好的UI界面上,获取videoPlayer组件和rawImage组件,然后在Update里面将videoPlayer的texture赋值给rawImage的texture,最后在场景中就可以看到视频在播放。
3)在PlayVideoOnUGUI类里面,实现播放、暂停、关闭功能就要用到Bool指isPause和isClose,当isPause为false且isClose为false时,用Play()方法来让视频播放;当isPause为true且isClose为false时,用Pause()方法来让视频暂停;当isPause为true且isClose为true时,用Stop()方法来让视频暂停并且让原先的图片将视频替换掉。
4)实现进度条功能,首先是ShowVideoTime方法,先获取当前的视频播放时间,再将当前视频播放的时间显示在 Text上,后把当前视频播放的时间比例赋值到Slider 上,然后就是在Update方法里面调用此方法,最后实现时间实时更新的效果。
5)在SliderEvent类里面,创建SetVideoTimeValueChange方法,目的是当前的 Slider 比例值转换为当前的视频播放时间,然后在OnDrag方法里调用此方法并将isPause改为true,最后再OnEndDrag方法里将isPause改为false。
6)最后通过运行场景,用户可以点击这些按钮。界面效果如图3所示:
图3 VR视频播放效果图
5 结束语
VR平院校史馆项目的实现,用户从入馆前到入馆后有十几个任务点,用户完成一个任务之后才能进入下一个任务点。任务分为图文交互、视频观看、答题测试、图片消消乐等。技术实现上,该项目使用主流的Unity引擎进行开发,用户可以通过戴头盔、拿手柄的方式在VR校史馆内进行虚拟漫游和交互,能让平院师生去通过虚拟环境了解平院六十年的发展史,增强了平院师生的集体荣誉感和时代责任感。