基于Unity3D的汽车展示系统的设计与制作
作者:谢新慧 司占军 刘恩锐
来源:《电脑知识与技术》2018年第31期
        摘要:目的:在Unity3D中实现汽车展示系统的开发。方法:汽车展示系统使用Adobe Photoshop进行展示系统按钮等相关素材的设计,使用3ds Max软件建造汽车模型。然后是在Unity进行资源的整合,通过C#语言编程完成汽车三维模型的虚拟展示。结果:制成一个完整的汽车展示系统的设计并完成系统的测试与发布工作。结论:基于Unity3D的汽车展示系统能够让用户足不出户了解车辆的相关信息,既能降低了汽车厂商的销售成本,又能扩大其品牌影响力。
        关键词:汽车展示;Unity3D;C#
        中图分类号:TP319文献标识码:A文章编号:1009-3044(2018)31-0093-03
中国汽车模型网
        基于unity3D的汽车展示系统,即窗口式虚拟现实展示系统,属于桌面式虚拟现实系统范
围。它是以计算机屏幕为窗口,利用了计算机或初级图形工作站等设备,采用立体图形技术,建立了一个三维立体空间的交互场景[1]。用户则通过键盘和鼠标等输入设备来操作和体验虚拟场景,达到交互的效果[2]。
        随着互联网电子商务的发展,促使企业需要根据客户对产品的要求,为客户提供一个能够从不同角度对产品细节进行展示的虚拟交互性展示系统[3]。交互性成为现代汽车展示发展趋势,而且,各种不同类型汽车展示系统中有很多使用了高新技术的例子,比如多媒体技术和虚拟现实技术,并且在技术发展的同时,不断丰富,既展示的企业的实力,也吸引了更多人的眼球。因此,基于Unity的汽车展示系统将会成为未来虚拟展示的重要技术手段之一[4]。
        1 系统设计思路
        该文通过游戏开发引擎Unity3D和强大的建模工具 3ds Max等软件,完成对基于Unity3D的汽车展示系统的设计与制作这一课题[6]。
        该系统设计主要由3ds Max 制作出汽车模型,然后导出到 Unity 中进行场景搭建,此时应避免模型的材质贴图出现丢失。最后进行脚本编写生成与运行测试。如图1所示为该系统设计的框架结构图。
        2 系统设计
        2.1 前期准备
        前期准备工作主要是确定展示车型,对应汽车型号搜集制作车模所需要的相关素材,包括汽车三视图、材质素材、模型贴图素材,并搜集汽车的相关资料,包括汽车图片等[5]。将搜集好的资料归类存放到固定的文件夹,方便进行管理。利用Adobe Photo和Adobe Illustrator制作UI,下载汽车广告视频和展示的背景音乐。如图2所示为UI界面的设计。
        2.2 车辆模型
        在3ds Max中制作好的车辆模型在导出时需要将单位设置为厘米,这样在模型导入Unity后才能按正常的比例进行缩放,否则会出现模型大小的偏差。在制作车辆建模时,在保证模型外观完整度的情况下,尽可能对模型精度进行优化,增加顶点数和模型面数以达到更精确的效果。车辆模型如图3所示。
        3.3 Unity场景搭建
        将车模与材质、贴图、展台模型、UI等文件整理打包,一起导入到Unity工程中的Assets文件夹下,分类整理。在Unity中利用天空盒子、画笔等工具,更改展示所需的光线效果,最后在Unity中进行UI界面的制作,配合之前制作好的光线与模型,实现基本展示场景的绘制。
        3.3.1 欢迎页面的制作
        欢迎页面采用图片的形式,在网上到奥迪S5汽车的平面广告作为背景,利用Photoshop制作进入展示按钮的UI图片,在Unity中使用Button,编写跳转页面代码实现交互功能。
        3.3.2 内部展示页面的制作
        内部展示页面是从展示页面进入,其原理也是利用跳转页面的代码,从展示页面点击按钮,进入汽车内部。内部展示如图4所示。内部的展示是使用Unity中第一人称视角摄影机来完成,新建一个场景,放入汽车模型,之后导入RigidBodyFPSController摄像机,放在汽车内部,即可实现汽车内部的展示。
        3.4 交互功能实现
        3.4.1 车辆颜切换
        颜切换功能是点击按钮改变车身的颜,奥迪汽车的每款车型会有多个颜,通过该功能,用户可以查看同一车型在不同颜下的外观。
        该功能的实现思路是首先定义一个车身数组,用于存放需要改变颜的车身对象,然后获取该数组中所有对象的Renderer组件,并改变所有对象的材质颜为指定的颜,颜块作为一个按钮,当点击该按钮时,实现颜的切换。颜切换的部分代码如下:
        //定义变颜的车身数组
        public GameObject[] CarBody;
        //改变车身颜的点击函数
        public void OnblackClick()
        {
        CarBody[0].GetComponent<Renderer>().materials[0].color = Color.black;
        CarBody[1].GetComponent<Renderer>().materials[0].color = Color.black;
        CarBody[2].GetComponent<Renderer>().materials[0].color = Color.black;
        CarBody[3].GetComponent<Renderer>().materials[0].color = Color.black;
        ……
        }
        public void OnredClick()