““““TheTheTheTheCarCarCarCarTutorialTutorialTutorialTutorial””””PartPartPartPart2222CreatingaRacingGameforUnity在Unity中创建赛车游戏Part2:TweakingtheCar调整汽车Ifyou’vefollowedalongpart1ofthistutorialandassembledthecar,youarealreadyatapointwherethecarisprettyawesome.Butifyouhavedrivenitaroundabit,youwillprobablyhavenoticedthatthereisafterallroomforsomeimprovement.如果你已经跟着教程的Part1部分学完并组装了汽车,那么在这个非常不错的汽车这里你已经做好了准备,但如果你驾驶它已经开了一点,你将可能会注意到还有一些可以改进的地方。Thisiswheretweakingentersthepicture.Ingamedevelopmenttweakingisacrucialpartofmakingyourgamefun,challenging,awesomeorwhatevergoalyouhaveforyourspecificgame.Theideaisthatwhenyouhavesetupthenutsandboltsthatmakesyourgamerun,theremightbesomethingthatdoesn’tfeelquiteright-maybeyouwantthecarhandlingtobeabitdifferent,maybeyouwantthetopspeedtobeslightlydifferent,ormaybeyouwanttochangethescenelights.这是一个要调整进入的地方的图片,在游戏中,开发调整会使你的游戏更有趣,更具挑战性,更棒或你想在游戏中实现任何目标的一个最关键部分。这个想法就是当你设置螺栓和螺母使你的游戏能运行时,那里有一些东西你可能感觉不怎么正确--也许你想让赛车的操控有一点不同,也许你希望的最高速度稍为有点不同,或者也许你只想改变场景内的灯光。AmajorstrengthofUnityisit’stweakability-asyouhaveseen,allthepublicvariablesinyourscriptsareshownintheinspector,soyoucanchangevalueswithoutgoingintothecode.Andevenmorepowerful:Whenyou’vemadeachangeyoujusthitplay,andyouwillinstantlyseetheresultofthatchange.Youneverhavetowaitforthescenetoberebuiltorforamajorrecompileofthecode.一个Unity引擎的实力是它的可调整性--像你看到的那样,在你的脚本中所有的公共变量在都显示在检查面板上,所以你能改变这些变量的值而不需要深入代码,并且更强大的是:当你有了改变时你只需点击播放,你会立即看到这种变化的结果,你不用等待场景被重构或等引擎重编译代码。CenterCenterCenterCenterofofofofMassMassMassMass质心Nowthemostobviousthingthatneedstobetweakedisprobablythatthecarcanveryeasilybeflippedaroundwhenturning(ifyouhaven’ttriedyet,thenplayagainandspeedupabitandthenturnfromsidetosidewhilespeeding-thecarwillflipoverprettyeasily).Thereasonforthisflippingisthatwehaven’tyetdefinedthecar’scenterofmass.AlltheforcesthatareappliedtotheRigidbodyofthecar,areallappliedattheRigidbody’scenterofmass.ThecenterofmassoftheRigidbodywillbecalculatedbyUnityaccordingtotheCollidersattachedtotheRigidbody,eitheronthesameGameObjectoronchildobjects.Sincethecenterofmassofacaristypicallynotthecenterofthecar(andprobablynotthecenterofmassthatUnitycalculates),wewanttosetthecenterofmassourselves.现在大多数明显需要调整的事情可能已经做好了,但在转弯的时候汽车非常容易翻倒(如果你还没有试过,你可以再试一次,加快点速度,从一边转到另一边,当速度起来后还能容易发生空翻),发生空翻的原因是我们没有定义质心。所有被应用到汽车刚体上的力都会被作用到质心,刚体的质心将被Unity根据附加到刚体上的碰撞器来计算,不管是同一个游戏对象还是它的子对象。由于一辆汽车的质心通常不是车的中心位置(并且可能不是Unity计算的质心),我们想设置我们自己的质心。Thepositionofthecenterofmassforacardependsontheplacementoftheengineandotherfactors,anditcanvaryalotfromonecarmodeltoanother.Forthecarinthistutorialprojectthecenterofmasscouldbealittlebehindtheengine,slightlyabovefloorheightofthecar.Seeit’spositioninthisimage:汽车的质心位置取决于发动机的位置和其他因素,从一辆汽车模型到另一辆汽车模型它可能有很多变化,本教程中的汽车的质心应该稍稍位于引擎的后面一点,略高于地面的车辆高度。看看随后的这张图片中它的位置:•CreateanewGameObjectanddragittotheCarCarCarCargameobject.建立一个新的游戏对象并拖拽它到汽车游戏对象上。•RenameittoCenterOfMassCenterOfMassCenterOfMassCenterOfMass重命名它为CenterOfMass•ResettheCenterOfMassCenterOfMassCenterOfMassCenterOfMass’’’’ssssTransform(clickthelittlecogwheeltotherightoftheTransformintheInspectorandselect‘ResetResetResetReset’.Thiswillgiveitthesamepositionasitsparent,thecar.重设CenterOfMass的变换(在检查面板的变换的右边的齿轮上单击并选择“Reset’”,将是它和父对象汽车处于同一个位置)•Adjustitspositiontosomewhereyoulike.Eitherdoitbydragging,ortypeintheposition.Agoodpositionforthiscar’scenterofmasscouldbe(0,0.1,0.65).将它调到你看到的那个位置,可以通过拖拽,或键入一个位置,汽车质心的一个不错的位置可能在(0,0.1,0.65)•IntheInspectorassigntheCenterOfMassCenterOfMassCenterOfMassCenterOfMasstotheslotforitintheCarscriptComponent.Ingeneral,itisabadideatohavethecenterofmassbepositionedtoeithersideofthecenterinthex-axis,becausethiswillmakethesteeringbehaveoddly,andthuswehavealsosetthexvariableofthepositionto0.在检查面板上将质心对象分配给汽车脚本组件上的变量插槽中,一般情况下,质心被定位在X轴的中心一边是个坏的想法,因为这将使得操纵变得很奇怪,那样我们也能设置位置中X变量为0。YoucanalsochangetheCamera’stargettobetheCenterOfMassGameObjectinsteadofthecaritself.Thiswillgiveaslightlydifferentfeeling-playaroundwithitanddecidewhichsettingyoulikethemost.你也能改变照相机的目标到游戏对象的质心,以替换汽车自身,这将给你一个略微不同的感觉--驾驶它并且决定怎么设置才是你最喜欢的。SuspensionSuspensionSuspensionSuspension悬挂系统Anotherfactorthatcanheavilychangethebehaviorofthecaristhepropertiesofitssuspension.Thejobofacarsuspensionistomaximizethefrictionbetweenthetiresandtheroadsurface.Whenyouaredrivingthecaroverabump,allofthewheel’sverticalenergygetstransferedtotheframe.Ifwedidnothaveaninterveningstructure,thiscouldeasilyresultinthewheelloosingcontactwiththeroadcompletely,andafterwardsslammingdownintotheroadbecauseoftheforceofgravity.Thesuspensionisthatinterveningstructure.另一个因素是可以严重改变汽车行为的属性是它的悬挂系统,汽车的悬挂系统工作是最大限度地实现与轮胎和路面摩擦。当你驾驶的汽车在颠簸路面时,如果我们没有一个中介结构,这很容易导致车轮与路面完全失去联系,并且随后因为重力的作用使汽车掉到地面上,悬挂系统就是那个干预机构。WehavethreedifferentvariablestotweakfromtheInspector-therange,thedamperandthespring.AllarepartoftheWheelColliderclassthatweuseonthecar’swheels.在检查面板上我们有三个不同的变量需要调整--范围、阻尼器和弹簧。它们都是我们在汽车的轮子中使用的轮子碰撞器的组成部分。Totheleftweseethecarwiththestandardsettings,andtotherightweseeitwithamuchlargersuspensionrange.Combinedwiththespringanddamperproperties,youcanmakeitbehavelikeeverythingfromaformulaonecartoahuge