基于Unity3D的汽车展示系统的设计与制作
2018-01-20谢新慧司占军刘恩锐
谢新慧 司占军 刘恩锐
摘要:目的:在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()
{
CarBody[0].GetComponent<Renderer>().materials[0].color = Color.red;
CarBody[1].GetComponent<Renderer>().materials[0].color = Color.red;
CarBody[2].GetComponent<Renderer>().materials[0].color = Color.red;
CarBody[3].GetComponent<Renderer>().materials[0].color = Color.red;
……
}
……
3.4.2 开关门动画
开关门动画是该次设计中最核心的部分,它是通过单击车门实现的,也是汽车展示系统交互动作的重要组成部分。
部分代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class openDoor : MonoBehaviour {
public bool _OPEN = false;
public float speed = 0.5f;
public Animation _anim;
// Use this for initialization
void Start () {
_anim = this.gameObject.GetComponent<Animation>();
_anim.Stop();
}
// Update is called once per frame
void Update () {
if (_OPEN==true)
{
//當没有播放动画的时候,播放动画
if (_anim.isPlaying)
{
_anim.Play();
//-----改变动画的播放状态-----
//动画的当前时间置为初始
_anim["New Animation"].speed = 1;
//动画的播放速度为正常速度
_OPEN = false;
}
}
else
{
if (_anim.isPlaying)
{
_anim.Play();
//-----改变动画的播放状态-----
//动画的当前时间置为初始
_anim["New Animation"].speed = -1;
//动画的播放速度为正常速度
_OPEN = true;
}
}
}
}
3 系统测试及发布
点击File>Build & Run,在Platform中选择PC . Mac & Linux Standalone选项,之后点击Switch Platform,就可以将此工程构建为PC端的展示平台。点击Build and Run,选择保存目录,就可以保存并运行。至此,完成汽车展示系统的制作,见图5。
4 结束语
该次基于Unity3D的汽车展示系统的设计主要研究C#语言编写代码,并在Unity3D中实现开关车门、旋转汽车、更改汽车颜色等交互动作,从而制作出具有多种交互功能的汽车展示系统。随着互联网和电子商务的发展,基于Unity3D的虚拟产品展示系统对产品的市场适应力具有重要作用,众多优点预示着,它将会成为未来虚拟展示的重要技术手段之一。
参考文献:
[1] 朱志超. 虚拟现实展示设计及其应用[J]. 河南科技, 2010(7): 29-30.
[2] 孟祥斌, 王艳敏, 陈圣鹏. 交互式汽车虚拟展示及个性化定制系统设计与实现[J]. 机械工程师, 2014(11): 91-94.
[3] 李为. 产品虚拟展示平台的研究与开发[D]. 北京: 北京邮电大学, 2014.
[4] Wei Jiang, Teng Fei Dou, Bin Zhou. Web-Based Interactive Visualization of Virtual Reality[J]. Advanced Materials Research, 2013(760): 2542.
[5] 张茜. 基于Unity3D的汽车功能模拟与驾驶场景演示系统的设计和实现[D]. 南京: 东南大学, 2016.
[6] 张冬寒, 司占军. 基于WebGL技术的游戏设计与制作[J]. 电脑知识与技术, 2017, 13(9): 193-194.