基于Unity3d的驾驶模拟器的设计与实现.docx
摘要 随着近年来电竞业与游戏业的逐渐成熟以及规范化,游戏的受欢迎程度也是越来越高。游戏已经成为了相当一部分人在繁忙的工作学习中获得放松的最主要的途径。从2D到3D游戏,游戏画面变得越来越真实,使玩家能够在玩游戏时做到身临其境,不仅从游戏中获得快乐,甚至能得到对生活有用的知识。Unity3d是一款十分成熟的游戏开发软件。经过多年的改进与发展,Unity3d一直占据着游戏开发的市场中占有一席之地。本次课题以Unity3d为游戏开发引擎编写3D模拟驾驶类游戏,借助了NWH Vehicle Physics插件进行汽车物理系统的开发,玩家将会的到较为真实的驾驶手感体验。本课题旨在实践中学习游戏制作的基本方法,探索设计游戏的基本思路。玩家需要通过键盘控制汽车,在模拟的城市场景中遵守系统设置好的交通规则,避免发生碰撞,在整个游戏过程中,玩家会在路上遇到堵车甚至撞车等路况,可以从中体验到真实的驾驶体验。该驾驶模拟器有着较高的自由度,玩家可以通过探索来发现更多的乐趣。 关键词: Unity3d 驾驶模拟 交通规则 Abstract With the gradual maturity and standardization of call competition and game industry in recent years, the popularity of games is also increasing. Games have become the most important way for a considerable number of people to relax in their busy work and study. From 2D to 3D games, the game picture becomes more and more real, so that players can play the game in real time, not only get pleasure from the game, but also get useful knowledge for life.Unity3d is a very mature game development software. After years of improvement and development, unity3d has been occupying a place in the game development market. In this project, unity3d is used as the game development engine to write 3D simulation driving games, and NWH vehicle physics plug-in is used to develop the vehicle physical system, so that the players will have a more real driving experience.This topic aims to learn the basic methods of game making in practice and explore the basic ideas of game design. The player needs to control the car through the keyboard, abide by the traffic rules set by the system in the simulated urban scene, and avoid collision. In the whole process of the game, the player will encounter traffic jams or even crashes on the road, from which he can experience the real driving experience. The driving simulator has a high degree of freedom, players can find more fun through exploration.Key words: Unity3d Driving simulator Traffic rule 目 录第一章 绪论11.1 选题的目的及意义 11.2 研究现状 11.2.1 市场状况 11.2.2 研究内容 21.3 章节安排 2第二章 Unity引擎与插件使用说明32.1 游戏引擎介绍 32.2 Unity3d常用组件 32.3 物理引擎 32.4 Unity引擎的常用函数 42.5 UI组件 52.6 插件 5第三章 游戏设计介绍 63.1 场景设计63.1.1 地形的绘制 63.1.2 场景的绘制 73.2 建筑物设计 73.3 游戏UI设计 73.3.1 图形用户界面 83.3.2 仪表盘设计 93.3.3后视镜UI设计 93.3.4 小地图设计 103.4 灯光的设计 103.5 游戏按键设置 11第四章 汽车参数的设置与说明134.1 汽车的设计 134.1.1设置WC3D 144.1.2声音 154.1.3滑痕 164.1.4灯 164.1.5损害 184.1.6翻转 194.1.7地面类型探测 194.2 具体功能实现 194.2.1汽车移动脚本 194.2.2质心 20 4.2.3下压力 224.3 UTS PRO 224.4 碰撞检测 244.5 镜头切换 254.6 角色管理器 274.7 档位 284.8 Vehicle changer脚本 29第五章.游戏测试 315.1 设备环境 315.2 游戏运行结果 315.3 测试结果分析 32第六章.展望与总结 33参考文献34致谢 35广东东软学院本科毕业设计(论文)第一章 绪论1.1选题的目的及意义随着计算机科学技术突飞猛进的发展,游戏行业也被带动得风生水起。从最早的红白机系列再到稍早的主机时代,之后更是在PC端大放异彩,现在甚至我们可以在移动端玩上一些跨平台移植过来的3A大作。在这种的大环境下,游戏业也是来到了一个良性循环,越来越多的公司会将资金投入到游戏的创作与研发当中,这也使游戏市场的竞争越发激烈。随着VR和5G的到来,为了抢占市场份额,游戏公司也加大力度开发各种新颖的游戏,而Unity3D这款灵活多变可供多平台的游戏开发引擎,受众非常广泛。Unity3D是由Unity Technologies开发的一款游戏引擎,【1】它也是3D游戏开发中的佼佼者。3D游戏作为目前主流的游戏类型,游戏的空间感和立体感会比2D游戏更强,而游戏的适应性以及娱乐性则会比尚未成熟的VR游戏更加强。简单来说,3D游戏就是三维游戏,它的实质是利用光线和阴影的变化通过平面来体现纵深感,使玩家能对物体产生长宽高的感觉,从而达到具有立体感的3D游戏的效果2。在众多的游戏种类中,模拟游戏是一个比较广泛的、接近生活的类型。玩家可以通过模拟类游戏去体验游戏设计者所设计出的世界,一个与现实世界相似却不相同的游戏世界。仿真程度越高,意味着游戏更贴近现实,一些生活中无法遇到的状况就可以通过游戏(也可以说是模拟器)进行模拟,目前在研究方面,许多的物理现象都需要通过模拟器的帮助进行研究。退一步来说,对于平民百姓,模拟类游戏也可以对生活中无法遇到的事情进行模拟,使玩家能够从中获取到生活中没有的经验与知识。模拟类游戏正是一种可以为社会带来贡献的交互式游戏体验。本次课题也是从模拟类游戏出发,通过Unity3D这个功能强大、具有高度的跨平台适应性的游戏引擎,来制作一款模拟类的驾驶游戏3。1.2研究现状1.2.1市场状况电脑游戏作为电脑的软件,在技术方面的发展与革新都需要电脑硬件的支持。其中最重要的硬件就是显卡。从九十年代末的VOODOO显卡发展到如今的RTX2080,游戏也从马赛克画质的发展到当今以假乱真的游戏画面。从DOOM到CS到使命召唤、从魔兽争霸到英雄联盟,各种类型的游戏在业界人士的努力下逐渐丰富。早年间中国由于缺乏核心技术,并没有过多自主开发的游戏,而是通过代理引进为主。虽然很多媒体吹嘘中国是在80年代接触各类游戏,但其实那都是港澳地区的盗版游戏,而中国大陆则是在90年代开始引进各类游戏。因为当时几乎没有关于游戏行业的政策,宽松的政策促使游戏市场快速增长。到了1996年,远在大洋彼岸的欧美游戏公司也参与到了这种新兴行业当中,其中就有EA与育碧两间著名的游戏公司,这第一批入驻的欧美游戏公司也对中国的游戏行业带来深远的影响。到了20世纪出,正版光盘游戏由于高昂的价格以及当时国内将游戏称之为“电子海洛因”而并没有取得很好的成绩。到了2003年,我国首款自主研发的3D游戏出现,然而起步较晚的国产3D游戏从设计理念到研发制造,都与国外先进的游戏有着明显的差距。不过近年来,得益于国家政策的扶持以及技术的发展, 3D游戏在我国得以迅速发展。在如今的游戏市场中,FPS与MOBA类一直占据了主要地位,模拟类游戏则作为比较小众的类型存在。相比这两种类型的游戏,模拟现实的游戏会有真实世界的物理系统,会有更加贴近现实的场景。不过近年来,这类游戏由于仿真度越来越高,并且在具有一定趣味性的情况下也收获了不少忠实的玩家,其中比较有名的就有欧洲卡车系列游戏4。1.2.2研究内容这些年来,随着群众生活水平的提高a驾驶作为一项社会基本技能,目前在中国有接近4亿人拥有驾照,然而现在的驾校为了应付考试,并不会对学员进行过多实际路况的教学,因此,有一部分新学员拿到驾照后其实还不是真正意义的学会了驾驶。模拟驾驶游戏能引领用户体验驾驶操作技能并熟悉一些在路上基本的交通规则,力求还原真实场景,并对玩家体验驾驶起到帮助。尤其是青少年用户,通过简单的操作、以游戏的模式进行模拟驾驶能够使驾驶的知识更加深入人心。根据这个要求,游戏主要通过碰撞检测来实现交通规则的检测,第一人称视角的驾驶也会让玩家更加融入游戏当中。1.3章节安排本文主要围绕一款以Unity3d为开发引擎所开发的驾驶模拟类游戏,从理论到实践,共分为六章。第一章为绪论,主要介绍了选题的目的及意义、研究背景与游戏市场现状以及游戏所涉及的内容。第二章将会简要的介绍选题的研发 当中所需要使用到的平台、软件、插件。第三章将会对游戏设计内容的具体事项进行分析,明确游戏各个部分。第四章将会对游戏功能的具体实现过程进行分析,主要为脚本内容的分析。第五章将对游戏进行测试,打包封装。第六章为结论与展望。第二章 Unity引擎与插件的使用说明2.1 游戏引擎介绍游戏引擎即游戏的软件框架,是为了设计游戏而专门开发出的软件框架,用户从中得到了开发游戏所需的基本功能。它的作用就等于基础设施,使用者则需要利用基础的框架实现更为复杂的产品。在这种模式下制造游戏的效率会大大地提高,但是这种便利也会带来相应的缺陷,但是对于开发者来说自由度也会相应减弱,不利于做出具有突破性的作品。Unity3d引擎由Unity Technologies 于2005 年推出,8是一款在当下炙手可热的游戏开发工具,为使用者提供了非常完美的跨平台系统以及交互良好的操作界面。它的编程语言主要是C#(少部分使用Javascript),它的功能十分完善,从小型独立游戏,到千万级的3A大作,Unity都能支持制作,并有很好的效果。2.2 Unity3d 常用组件·GameObject:场景中所有的实体都为GameObject 类。·Transform:用于控制和储存对象的位置,旋转,缩放,及控制游戏对象的父子关系。·Rigidbody: 用于物理引擎控制,刚体组件会对作用力作出符合物理规律的反应。·Collider:定义了物体的物理性状,可在一个对象中挂载多个碰撞体达到更真实的效果。·Mesh renderer:网格渲染器可以使个体在场景变得可见、呈现渲染后的效果,也可以为其添加材质。·NavMeshAgent:用于AI 的移动,避开障碍物。2.3物理引擎早期游戏并没有过多注意物理引擎的作用,当时几乎所有游戏,都通过极简的计算方式得出对应的结果从而体现出物理效果,比较有名的游戏为马里奥和索尼克等。当时的物理效果也仅仅是与墙壁相关的碰撞。 当2D游戏逐渐演变成3D时代后,物理效果的表现方式也发展迅速,三维的表现力大大地增加了游戏发展的可能性,使游戏种类向多方向发展 11 。Unity采用了英伟达的Physx物理引擎,这是一款目前广泛应用在各大游戏当中的热门物理引擎。如今的开发者只需要将参数设置好就可以通过物理引擎高效、拟真地模拟各种各样的物理效果,得到真实生动的游戏画面。在 Unity 3D驾驶游戏当中,物理引擎是整个游戏的核心,它主要包括了刚体、碰撞、物理材质等。游戏中物理引擎的作用是模拟场景中的物体相互碰撞作用。对于成熟的物理引擎,实现物体之间相互影响的效果是相当简单的。2.4 Unity 引擎的常用函数Unity3d 作为一个高度集成的引擎,在实现很多功能之时, Unity 所提供的函数就可以很好地完成。在本次的游戏开发中将会使用当不限于以下常用函数。3Awake:初始化函数,在脚本实例化的时候自动进行调用,只会在脚本的生命周期中调用一次。一般用于各个组件之间添加引用关系。Start:初始化函数,在对象被第一次enable之后,在Update 之前,Awake之后被调用。在生命周期中也只会调用一次。一般用于富裕变量值。Update:每运行完一次会再一次调用,跟游戏帧率相关。一般用于普通的数值监测亦或是按键输入后执行动作的触发点。FixedUpdate:每隔一定的时间调用(取决于游戏设置的每秒刷新次数),不会受到游戏帧率影响。常用于物理引擎的调用,以及需要固定时间更新的函数。当碰撞发生时,挂载在物体上的脚本中被定义到的函数,都会通过物理引擎进行调用。OnTriggerEnter:函数会在第一次碰撞检测后调用,执行一次函数内的内容,用于判定物体触碰到角色。OnTriggerStay:函数会在持续碰撞的过程中多次被调用,一直函数内的内容。OnTriggerExit:表示碰撞事件结束了,用于物体离开碰撞体。 2.5 UI组件事件触发器组件:事件触发器是一个将Unity所有UI交互需要用到的触发功能都集合在了一起的组件。它包含了所有UI交互的相关功能,用户可以通过编辑界面,将交互功能进行定义。通过回调内容驱动,在无需操作的时候就可以不占用计算机的资源。并且可以分配多个函数到单一事件8。IEventSystemHandler(事件处理程序)事件触发器的作用是识别用户的输入,是Unity的事件处理程序的功能。在代码中添加动态的按钮的事件需要通过代码上的接口。它具有以下特性:1、通过Interface接口添加事件功能。2、需要得到挂载了IEventSystemHandler类型的脚本的显示组件的支持。3、支持自定义事件监听器8。2.6插件NWH Vehicle Physics是一款包含多种车辆的预制件的Unity物理插件,包括:跑车、轿车、公交车等。每部车都具有真实且不一样的操作手感以及模型细节和空气动力套件。车辆部件包括了驾驶辅助系统、发动机、传动装置、油箱等。发动机的参数与现实是一样的,具有动力、扭矩及功率,这些都可以在脚本中进行调节,而变速箱则有自动挡和手动挡两种类型,也可以在脚本中选择是否勾选手动挡的选项。NWH Vehicle Physics插件还包含了全车照明系统,近光灯、远光灯、停车灯、刹车灯和转向灯,这些在现实当中出现的汽车灯光都会在游戏中得到还原。驾驶辅助装置则包括了巡航控制系统、TCS牵引力控制系统、ABS防抱死装置和漂移辅助系统。车内还具有仪表盘与指示灯等仪器,能够模拟仪表盘的真实效果。在音效方面,这款插件提供了多种汽车运行过程中所需要的音效,方便用户的使用。最重要的一点是车辆在碰撞后收到损害并根据受损程度作出物理效果的变化,并且自带了刹车印、尾气、灰尘等粒子效果。NWH Vehicle Physics插件定义了车轮碰撞器Wheel Controller 3D,它可以检测3D地面,这个功能会将地形的纹理材质检测出来,因此通过不同的材质会得到不同的摩擦阻力曲线。Urban traffic system,简称(UTS PRO)是一款模拟真实交通系统的软件,为用户提供了多种交通工具以及人物的巡航。第三章 游戏设计介绍3.1场景设计游戏主体总共包含了3个场景,一个是UI界面的场景,一个是选择界面的场景,另一个则是游戏的主体城市场景。3.1.1地形的绘制主体场景包括作为gameobject的场景内物体与地形,首先制作的则是游戏的地形:,在Hierarchy面板中Create->3D Object->Terrain 便可以创建一个平面。创建后可以在右侧Inspector面板中调整Terrain平面的各种参数,首先点击paint terrain,点击set height,在Height里输入一个数值,然后点击flatten,这样平面抬高,否则将无法绘制凹陷地形。做好了这一步就可以正式开始地形的绘制,通过下拉菜单,可以轻松地对地形分别进行抬高降低、绘制贴图、添加树木和植被等操作。从而得到想要的地形。图3-1 地形下拉菜单图3-2 地形图3-3 游戏场景图3.1.2 场景的绘制地形建好后,即可在地形上添加各种游戏物体,完成游戏场景的建立。3.2建筑物设计主场景作为一个城市场景,建筑物的引入是必不可少的,当我们引入了一定数量的建筑物后,将会对性能的要求,为了尽可能地节省电脑资源,在制作过程中将会使用到AutoLOD组件。通过设置摄像机的远裁剪面减少游戏场景内物体的渲染程度, LOD算法将很好地解决上述问题,在虚拟场景当中,出于显示效果的需要,有时候不一定可以将每个建筑物简化进行减面处理,这时候AutoLOD就能很好地应对这个问题。LOD全称Level Of Details ,中文为多细节层次。在游戏场景中,模型被渲染的顺序取决于摄像机到物体对象的远近。距离较近时,高精度模型将会被显示,距离较远的时候则会显示低精度的模型。Unity会根据需要自动调整显示的模型种类。3-4 LOD Group组件3.3游戏UI设计游戏的主界面设计:当一进入游戏,就将会跳转到开始界面,在该界面中你可以看到上面写有游戏名称,在右上方有一个游戏的标志,依次往下的是声音选项按钮,点击后会进入声音面板。最下面的是退出游戏按钮。3-5 游戏主界面游戏界面主要采用了Unity自带的UI插件UGUI,在整个开发过程中会用到一些组件:·button组件:按钮组件,通过添加点击事件进行交互·panel组件:作为存放其他组件的容器,添加image后可用于背景显示·image组件: 用来存放图片,一般用于logo或者按钮的背景·text组件:用来显示文本信息·slider组件:滑动条组件,滑动条有一个数值,通过滑动事件同步数值可调节音量大小等属性。3.3.1图形用户界面Dash图形用户界面控制器Dash GUI控制器脚本用于控制车辆的仪表板和仪表板灯-无论是在车内还是在HUD上。可设置模拟和数字速度和转速计,以及转向灯、指示灯、驾驶辅助和检查发动机指示灯。可根据需要进行调整。模拟量表控制模拟仪表。下列字段可用:Max Value指针结束时的值。Start Angle指针在最低值时的角度。在播放模式下调整此值的选项。End Angle指针在最高值时的角度。在播放模式下调整此值的选项。Needle smoothing -平滑指针的行程,使其在有质量和阻力的情况下变为无行动力的, Lock at Start/End在播放模式下将指针锁定在开始或结束角度。要调整打捆针行程,您可以进入播放模式并勾选其中一个锁选项。当指针在开始或结束时锁定时,调整开始或结束角度,直到针头应该在起始位置。确保指针正确地围绕中心旋转。3-6 仪表盘与指针3.3.2仪表盘仪表盘指针转动脚本:通过起始角与结束角计算偏移位置,使用Mathf.Lerp线性插值函数在仪表盘的最大值与最小值两个向量中进行Vector3.Lerp的插值。指针将随着汽车速度的变化而转动。3-7仪表盘指针偏转代码3.3.3后视镜UI设计由于在第一人称视角当中转移镜头观看两侧后视镜不便于操作,显示效果也不理想。所以这次将倒后镜转化成贴图UI放在屏幕的两侧。制作方法如下:首先在项目中新建一个“Render Texture”与”raw image”并命名为”left mirror”,然后将“left mirror”,赋予本身设置好的后视镜的“Target Texture”当中,同样操作到“raw image”当中,渲染后将会在raw image当中里出现camera所呈现的对象。重复一次操作,即可得到另一侧的后视镜。3-8 投影到raw image的后视镜3.3.4小地图的设计小地图的设计与后视镜的设计同理,只需将镜头拉得足够远并在其中添加一个立方体,立方作为汽车的子物体,通过reset位置让自身位于汽车的正上方,汽车移动的同时,也会随之移动,使视觉效果看起来更好15。3-9 小地图3.4灯光的设计游戏的灯光主要包括自然场景中的太阳光(使用directional light),以及建筑物的灯光。既然作为自然场景,那么当然会有昼夜更替。进入游戏后,将会定义到一个随机时间也就是太阳会在随机的高度,然后加入旋转脚本让太阳以一定速度旋转,从而模仿太阳的自转。最后还给太阳加上的光晕,达到更加真实的效果。实现逻辑如下:public class sunMove : MonoBehaviour public float speed = 0.1f; private int degree; void Start() degree = Random.Range(0, 360); gameObject.transform.Rotate(degree, 0, 0); */把方向光(太阳)这个物体的初始角度(X轴)设置成刚才随机生成的degree/* void Update() gameObject.transform.Rotate(-speed * Time.deltaTime, 0, 0); 变量speed是太阳的旋转速度,变量degree是太阳初始的角度。speed与degree两个变量分别为太阳绕地图旋转的速度及太阳起始的角度。在start函数中,初始角度将被设置为0360度的一个随机数,update方法里,每一帧按speed的速度改变太阳的角度,实现太阳旋转的效果。通过上述代码即可达到太阳围绕场景进行自转的效果,为了使效果更加真实,我们可以将flare光晕效果添加到光线(direction light)当中。当到达某个角度后,可以定义一个bool值,用于场景的灯光开关。3-10 太阳光3.5游戏操作设计前进W/方向键上后退S/方向键下左转A/方向键左右转D/方向键右手刹space点火/熄火E升档(需设置手动挡)R降档(需设置手动挡)F近光灯L远光灯K左转向灯Z右转向灯X镜头切换C上车/下车V升档R降档F一些按键的实现如下列代码所示:4-11 按键实现代码第四章 游戏功能的实现 4.1汽车的设计作为一款能够模拟汽车物理效果的插件,NWH Vehicle Physics提供了一些参数,这些参数可以更好地模拟出物理效果。以下将会讲解这些参数以及如何设置。VehicleController脚本的结构通常为:4-1 VehicleController脚本结构先导入汽车模型:将刚体添加到父对象,然后将质量设置为小型车的质量,大概为15001800。为子物体添加碰撞器。至少需要一个任意类型的碰撞体使刚体正常工作。设置好刚体后,需要创建车轮碰撞器。不要添加车轮碰撞器脚本到需要旋转的车轮对象中,创建车轮控制器对象的最简单方法是复制,然后删除来自副本的网格过滤器和网格渲染器对象。然后,将复制的对象移动到您想要的弹簧动程的顶部。最后,将控制盘控制器组件添加到所有重复的对象。结果应如下图所示,其中绿线表示弹簧动程。4-2 弹簧动程检查是否已正确检测到车轮所在的一侧。中心轮不会自动检测。空字段将出现在车轮控制器检查器的底部,。将相应的控制盘可视化拖动到此字段。如果你的车轮目视检查车轮由多个零件(轮胎、轮辋、轮盘等)组成单个对象,确保轴保持在应有的位置。结果如下图:4-3 WC3D碰撞体通过WC3D检查器调整车轮控制器半径和宽度,直到绿线适合轮子。之后设置忽略层。这是最重要的步骤之一,如果跳过这一步,车轮将会误检测到车辆本身为地面。创建一个新层,并对它进行命名,之后分配到整车的碰撞器。这样Body对象将会拥有碰撞体,并且它的层被设置为新的已创建层。你可以改变车轮操纵仪。运行游戏,完成上述操作,汽车悬架就会开始工作了4.1.1 设置WC3D移除所有车轮碰撞器对象中的车轮碰撞器组件,并使用按钮添加WC3D控制器脚本。添加Parent Object以及Wheel Visual对象。4-4 WC3D设置在Scan Ignore Layers中选择不与之碰撞的层,防止与车辆其他碰撞体发生碰撞,使汽车发生不规律的弹跳或震动。WC3D字段说明:Wheel(车轮)Side the wheel is on确定偏制方向Tire Radius 车轮总半径Wheel Width车轮宽度Wheel Mass车轮的质量Rim Offset从中心到车轮的偏移量Use Rim Collider选择使用模拟轮子上半部分的对撞机,以防止物体从侧面通过轮子Geometry(几何结构)Camber Curve动画曲线,x轴表示车轮经过范围,0表示车轮向上,弹簧压缩,1表示弹簧完全松开。Spring (弹簧)Max Spring Force弹簧被完全压缩时所施加的力Spring弹力,弹簧从完全伸展到完全压缩所需的力Spring Force Curve弹簧力曲线,显示弹簧力沿曲线的分布Damper(阻尼器)Bump N/m/s表示弹簧压缩时每秒1米的弹簧速度所受的力,单位为牛顿Rebound表示弹簧伸展时每秒1米的弹簧速度所受的力,单位为牛顿Damping Curve阻尼曲线4.1.2 声音声音部分包含了车辆声音效果相关的所有字段。每个区域仅影响脚本附加到的车辆。当场景开始时,音频源是由脚本生成的而非手动添加,每个声音组件都继承了SoundComponent 的类,因此它们会有公共的字段:音量,音高和剪辑。一些声音组件还拥有附加字段,如音量或音高范围。它们的一般解释是:Volume音量。改变这个运行时通过车辆控制器检查器的值不一定更改音频源的音量,因为大多数声音组件都设置了音量和音高仅在创建音频源时(在开始时)。你仍然可以在运行时通过脚本或通过调整直接音频源,退出播放模式时不会保留该值。Pitch与音量相同,仅用于音高。Volume Range可根据车辆声音部分的状态表示。Pitch Range与音量范围相同,仅用于音高。Clips音频剪辑列表。取决于声音成分将使用剪辑(例如发动机怠速部件)或随机选择其中一个剪辑(如换档或碰撞部件)。如果可以使用多个剪辑。如果在组件上使用多个剪辑但仅支持一个,那么只有第一个会被使用。如果不指定剪辑(列表大小为0)声音组件将被关闭。4.1.3滑痕当车轮在坚硬表面上打滑时会产生打滑痕迹。当车轮打滑时,可以在车辆底部的“Vehicle Controller”中的“General”下拉菜单中定义。 其中最重要的是“持续性滑痕”选项。滑动标记的默认行为是删除最旧的skid mark。这是一种类似于贪吃蛇游戏的效果,在总长度上实现滑痕的长度是一样的。这个“轨迹”的长度可以通过更改每个部分的最大标记字段调整,如果永久选项被禁用,将保留标记最大数量的滑痕。如果每次滑痕数量达到每个部分的最大标记将生成一个新的skidmark对象,并生成旧的skidmark部分留下完整的痕迹。这样就不会删除旧的滑痕。随着时间的推移,视口中的三角形数将会增加,所以还有一个持续滑痕距离选项可以解决这个问题。当滑痕与车辆的距离创建它的值超出了这个值,skidmark将删除它自身。4.1.4灯所有灯光都继承自同一类,因此具有相同的字段。需要解释的选项有:光源-可以是任何Unity灯光资源。主要用途是为近光灯和远光灯创建聚光灯。即使模型是没有单独灯光网格的低多边形也可以用于创建模型点光源做到例如对刹车灯的模仿。在下图中,点光源用于单网格交通工具,可模拟闪光灯:4-5 车前灯如果需要使近光或远光聚光灯增加一些真实感,可以将附带的“前照灯Cookie”添加到它们中。灯光网格渲染器接受任何使用标准着色器的网格渲染器。当灯光打开时,材质球的发射属性将会启用。若要设置具有发射的网格,则需要勾选阴影选项中的发射选项,并对发射的颜色和强度进行调整。完成后,禁用发射属性。轻型网格渲染器可用于具有单独网格的车辆灯。它还可以用作基本形状灯光上的覆盖层。驾驶辅助装置提供以下驾驶辅助:ABS如果设置为1,则制动时车轮不会打滑。TCS如果设置为1,则加速时车轮不会打滑。稳定性-通过增大当前摩擦力降低车辆的失控选择的倾向由起始于0,0并结束于1,强度的线性曲线形成的摩擦曲线,这意味着摩擦力会随着滑动而增大,也可以认为将其作为车轮控制器设置中的动态横向系数。可以用来获得更多的街机感觉的车辆。不会在低速时将网格计算在内。漂移辅助计算车辆前进方向和矢量之间的角度,根据角度值施加校正力,有效地限制漂移的角度,使其失控自转。较高的值将允许较少的漂移,而较低的值将会有更多的偏转。4-6 驾驶辅助4.1.5损害勾选Damage选项后,车辆上的网格将变形。在车辆停止工作之前,可以调整的允许损坏数实际上是由碰撞引起的所有减速的总和。碰撞损伤取决于碰撞瞬间的减速,当车辆行驶得越快,碰撞之后停止得就越快,车辆得到的损伤数值就越大。1000损伤在此等于峰值减速度为1000m/s2的碰撞。发动机的能量会随着车辆收到越来越多的损害而减少,如果撞击发生在靠近车轮的位置,发动机会发出随机的声音,前提是车轮网格被标记。之后车轮会发生随机的偏移,使车辆变得不易操控。网格变形是撞击后的产物,是基于队列的。这意味着每帧只能变形有限数量的网格。可以通过更改“每帧变形顶点数”字段来调整此值。较高的值意味着在较少的帧中完成变形,而较低的值将在较高的