基于Unity3D的综合体育馆虚拟漫游实现
2018-09-26王莉莉宋燕燕童氿一
王莉莉 宋燕燕 童氿一
摘要:随着计算机技术和网络技术的高速发展,虚拟现实技术逐渐走进人们的日常生活。建筑虚拟漫游作为虚拟现实技术的一个重要分支,被广泛应用于场馆展示项目中。本文以综合体育馆为虚拟漫游场景,使用3D Max软件制作三维模型,Unity3D引擎为开发工具,实现了综合体育场馆第一人称虚拟漫游。
关键词:虚拟漫游;体育馆;Unity3D;第一人称漫游
中图分类号:S126 文献标识码:A 文章编号:1007-9416(2018)05-0089-03
1 引言
虚拟现实技术是一种利用计算机模拟产生场景,并能实现虚拟现实环境的计算机仿真技术。利用最新的计算机虚拟现实技术创作的三维虚拟环境较二维照片和视频更直观形象,更逼真,临场感更强。传统体育场馆在宣传上,仅仅只能通过网站图片的形式,缺乏现实空间感受。场景虚拟漫游技术的实现,可以让使用者产生身临其境的感觉,还可以在场景中通过交互,实现场馆预定、查看详细功能等。本项目的研究具有较高的实际应用价值。
2 虚拟漫游系统及Unity3D引擎
虚拟漫游系统是一种能够集视觉、听觉、触觉为一体的虚拟环境,能够实时仿真虚拟空间,可从任意角度对虚拟对象进行浏览观察,可与其中的对象进行交互的新技术。具有沉浸感、交互性、构想性等特点。在建筑设计、城乡规划、家具装潢、场景展示等领域,游戏设计与娱乐行业应用广泛。
Unity3D是由Unity Technologies开发的一款跨平台综合游戏引擎,能够运行在Windows和Mac OS X操作系统下,可以发布游戏到Windows,Mac,Wii,iPhone,WebGL(需要HTML5)和Android等多种平台。脚本语言简单,支持各种插件,开发速度快,跨平台性好,可以让用户轻松创建3D游戏、建筑可视化、三维动画等类型的交互式内容。
3 综合体育馆系统设计
本文所实现的综合体育馆漫游系统主要利用三维建模软件3DS Max完成场景和模型的建模,利用Unity3D引擎来完成系统的漫游和交互。
3.1 系统总体设计目标
综合体育馆漫游系统主要包含乒乓球场、羽毛球场和篮球场所、观众席看台四部分。使用者可通過键盘W、A、S、D键来控制位移,通过鼠标控制视角,可浏览场馆任何区域。可查看场馆预定信息、进行预定操作、查看操作说明和退出系统等。
3.2 系统功能模块设计
本系统主要包括建模模块、漫游模块和交互模块,功能结构图如图1所示。建模模块主要实现综合体育馆整体建模和三个运动场区的建模;漫游模块主要实现第一人称视角位移和视角控制,碰撞检测;交互模块主要实现查看预定信息、预定场馆、查看操作说明及退出系统功能。
4 综合体育馆漫游系统实现
4.1 建模模块实现
本系统建模主要通过3DS Max软件建模、贴图、渲染、烘焙完成。主要包括体育馆整体建模和三个运动场区的建模。在将模型导入Unity3D引擎前对模型面数进行了优化,将多个次要对象通过布尔运算合成一个对象,减少Unity3D的渲染负担,检查场景中的孤立点和面,适当删除,调整贴图模式,减少灯数。通过此类优化措施,提高系统运行效率。
(1)体育馆整体场馆建模。场馆外观为灰色,整体类正方形,有层次感,侧面为透明玻璃。如图2所示为导入Unity3D后的整体场馆外观图。馆内墙壁采用灰色吸音材料,可以隔绝噪音,保证比赛不受杂音影响。制作时,新建一个长20,宽5,高5的长方体,然后复制粘贴出多个同样的长方体,再进行堆叠,将体育馆模型构建出来。如图3所示为导入Unity3D后的场馆室内效果图
(2)乒乓球场台建模。乒乓球球台按照国际标准设计,乒乓球球桌台面尺寸为2740×1525mm,台高为760mm,网宽1.83米,网高0.1525米。本系统中采用绿色桌面。如图4所示为乒乓球球台模型图。
(3)羽毛球场建模。羽毛球球场按照国际标准尺寸设计,球场为长方形场地,长度为13.40m,场地宽为5.18m设计为单打场地。球场上各条线宽均为4cm,球场界限用白色画出。羽毛球球网长6.10m、宽760mm,网孔大小在15-20mm之间,网的上沿有75mm宽的双层白布。网柱高1.55m,两根网柱分别立在双打场地边线的中点上。球网中部上沿离地面为1.524m,球网两端高为1.55m。如图5所示为羽毛球场模型图。
(4)篮球场建模。篮球球场按照国际标准尺寸设计,整个篮球场地长28m,宽15m。篮圈下沿距地面3.05m。线条:宽度为5cm. 球场界线距观众席2m。中线向两侧边线外各延长15cm。罚球线与端线平行,它的外沿距离端线内沿5.80m;这条线长为3.60m。罚球区是以罚球线中点为圆心,以1.80m为半径,向限制区外画出一个半圆区域,限制区内的半圆画成虚线。罚球区中第一条线距离端线内沿1.75m,第一位置区的宽度为0.85m,并且与中立区域的始端相接。中立区域的宽度为0.40m,第二位置区与中立区域相邻,宽度为0.85m,第三位置区与第二位置区相邻,宽度也是0.85m。所有区域线条长度为0.10m,并垂直于罚球区边线的外侧。中圈画在球场的中央,半径为1.80m。三分投篮区距边线1.25m,从端线引出两条平行线,半径为6.25m(量至圆弧外沿)的圆弧(半圆)与两平行线相交圆心距端线内沿中点的距离为1.575m。如图6所示为篮球场模型图。
(5)观众席看台建模。观众席以NBA联赛中球馆的观众席为模板进行设计,分为三层。第一层为观众椅,椅子高度为410mm,椅子座位宽度为200mm,共三排。第二层和第三层都是阶梯型座位,每级阶梯的座位间由隔板隔开,每级阶梯高为400mm,共14级阶梯。如图7所示为观众席看台模型图。
4.2 漫游模块实现
首先,在Unity3D中新建一个工程文件,自带一个主摄像机和一个自然光。然后,将制作好的模型导入Unity 3D,将制作的场景拖入制作窗口。
(1)第一人稱漫游位移控制功能实现。首先,在场景中添加一个圆柱体,代表用户。将主摄像机设定为跟随圆柱体移动,通过控制场景中圆柱体的位移和摄像机的转到,来实现用户的位移和视角。通过代码设置了向前行走、向后行走、横向移动和跑动的速度,并对跳跃的高度进行了设置。控制第一人称向前位移和向左位移的关键代码如下:
if (Input.GetKey(KeyCode.W)) //设置键盘上的“W”键控制第一人称视角向前移动
{ float x = Mathf.Sin(transform.eulerAngles.y * Mathf.Deg2Rad) * distance;
float z = Mathf.Cos(transform.eulerAngles.y * Mathf.Deg2Rad) * distance;
transform.Translate(new Vector3(x,0,z), Space.World); return true; }
if (Input.GetKey(KeyCode.A)) //设置键盘上的“A”键控制第一人称视角向左移动
{transform.Translate(new Vector3(-distance, 0, 0)); return true;}
(2)第一人称漫游视角控制功能实现。第一人称漫游视角控制,主要通过摄像机的视角转动设定为跟随鼠标的移动而移动。如图8所示为第一人称视角漫游场景图。视角控制的部分关键代码如下:
public Camera cam;// 定义相机
public MovementSettings movementSettings = new MovementSettings();//定义相机视角移动
public MouseLook mouseLook = new MouseLook();// 跟随鼠标移动而移动
public AdvancedSettings advancedSettings = new AdvancedSettings();
(3)碰撞检测功能实现。碰撞检测是虚拟漫游系统的重要功能,其作用是用来确保两个不可穿透的对象互相不能共享相同的空间。首先,为圆柱体添加刚体,再通过为所有模型添加碰撞检测Mesh Collider属性来实现。
4.3 交互模块实现
(1)查看预定功能实现。首先,新建一个button,将其命名为 “chakan”,将按钮的文本名称改为 “查看预定”。然后在按钮上方新建一个Text文本框“yuding”。新建一个c#文件“mingdan”,通过代码设置文本框初始不可见,编写代码,设置点击按钮后,如果文本框是显示状态则将其隐藏,如果文本框是隐藏状态则将其显示,然后将脚本拖到“chakan”的属性栏中的Button(Script)中,再将拖到Button(Script)中的脚本文件拖到OnClick中,并设置点击按钮后执行mingdan.sendMessageUpwards。如图9所示为查看场馆预定功能图。部分代码如下:
void Start()
{ga=GameObject.Find(ganame);
ga.active=false; //设置开始可见性}
void OnClick() //控制显示和隐藏的方法
{if (ga.active==true)//文本此时显示
{ga.SetActive(false);//点击后隐藏}
else if(ga.active==false)//文本此时隐藏
{ga.SetActive(true);//点击后显示}}}
(2)预定场馆功能实现。首先,添加一个button和一个Input Filed。分别改名为“yuyue”和“yudingxinxi”,button控件的文本名称改为“场地预定”。新建一个c#文件“xinxishuru”,编写代码使在Input Filed中输入的内容能在查询预定的文本框内显示,将脚本拖到Input Filed属性栏中的On Value Changed(String)中,设置对应的Text.text。
(3)操作说明功能实现。首先,先新建一个button,命名为“caozuo”,按钮文本名称改为“操作说明”。然后在button上方新建一个Text文本框“kongzhi”。通过代码设置文本框初始不可见,新建一个c#脚本“shuoming”,编写代码,设置点击按钮后,如果文本框是显示状态则将其隐藏,如果文本框是隐藏状态则将其显示,然后将脚本拖到“caozuo”的属性栏中的Button(Script)中,再将拖到Button(Script)中的脚本文件拖到OnClick中,并设置点击按钮后执行shuoming.sendMessageUpwards。
(4)退出系统功能实现。首先,先新建一个button控件,改名为“guanbi”,文本名称改为“退出”。然后新建一个c#脚本,编写好代码后保存,将脚本拖到Button(Script)中,再拖到OnClick中,并设置执行tuichu.OnClick。退出漫游部分代码如下:
public void ontuichu()
{Application.Quit ();// 退出漫游}
5 结语
虚拟现实漫游技术是一项应用广泛的计算机综合性技术,它利用计算机生成逼真的虚拟环境,通过漫游和交互让用户产生临场感。本文使用3DS Max和Unity3D工具实现了综合体育馆虚拟漫游系统,系统包括建模、漫游、交互三个重要组成部分,采用碰撞检测技术保证了系统的真实效果。系统设计效果良好,场景逼真。
参考文献
[1]范国华,等.基于Unity的虚拟校园漫游系统的设计与实现[J].安徽农业科学,2016,44(1):325-327.
[2]曲宝,等.基于Virtools的虚拟家居漫游系统的设计与实现[J].计算机工程与科学,2009.12:130-133.