【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 7850|回复: 13

Unity赛车游戏开发教程

[复制链接]
发表于 2012-9-22 21:46:45 | 显示全部楼层 |阅读模式
Unity赛车游戏开发教程——总纲(一)


介绍

        

    教程将演示

         预备知识

         不会演示



Part 1:组装赛车



         添加碰撞

         设置阴影

         添加赛车成分

         添加模糊的阴影

         刹车痕迹

最大痕迹长度

         痕迹宽度

         地面位移

         最小距离

         纹理

         添加音效

         完成装配



Part2 调整赛车



         质量中心

         悬挂

         悬挂范围

         悬挂弹簧

         悬挂减震

         Drag Multiplier

         速度,转向和传动

         数据包形式输出赛车



Part3 赛车的背后——脚本



什么是最重要的事情?

Start() - the Setup 5

SetupWheelColliders() 5

SetupWheelFrictionCurve() 6

SetupWheel() 6

SetupCenterOfMass() 7

SetupGears() 8

SetUpSkidmarks() 8

Update() 9

GetInput() 9

CheckHandbrake() 10

StopHandbraking() 10

Check_If_Car_Is_Flipped() 11

FlipCar() 11

UpdateWheelGraphics() 11

UpdateGear() 13

FixedUpdate() - All your physics are belong

to me 13

UpdateDrag() 13

UpdateFriction() 15

CalculateEnginePower() 16

CalculateState() 17

ApplyThrottle() 18

ApplySteering() 20

EvaluateSpeedToTurn() 20

Real Physics Model 24

The included Prefabs 24

The included scripts 25



介绍



         本教程的目的演示如何使用Unity去制作一个赛车游戏。教程将应用一个3D模型,脚本和成分装配一辆赛车。教程将提供完整的赛车游戏项目,在完成全部场景后用户能够进行游戏,并探索所有东西如何进行整合。教程也将提供场景,除了汽车以外所有内容都将齐备,用户将依此完成它。



教程将演示

         

         1、装备赛车

         如何应用一个3D模型,脚本和成分装配一个赛车的预制物体。就是正在阅读的此部分。

         2、调整赛车

         如何调整赛车使其更“好”或者适合不同方式。

         3、在发动机罩的下面

         深入研究驱动赛车的代码

http://unity3d.com/support/resources/fi les/CarTutorial.zip下载压缩的项目文件。



预备知识



         本教程没有有关Unity的入门知识,学习者必须具有一定的基本知识,如Unity如何组织,什么是游戏物体,什么是成分等等,熟悉脚本编程也是必须的。也就是说,教程将沿着路线说明很多的内容,基础和高阶知识。



教程不会演示:



         所有的其他脚本。

         最基本的知识,教程将不会讲述Unity的基本工作流程和成分知识。有关此内容,参看Unity网站的其他教程。

         用户手册和脚本参考对于本教程是很好同伴,可以帮助用户了解有关内置成分或者函数的相关内容。
        http://hi.baidu.com/new/next2_me
 楼主| 发表于 2012-9-22 21:49:55 | 显示全部楼层
unity3d.com/support/resources/fi les/CarTutorial.zip
下载压缩的项目文件。打开“CompleteScene”场景文件。该场景中赛车已经设置完毕,所以可以按Play按钮尝试此游戏。当前游戏的结果就是本教程将带领用户完成的效果。


     


   在尝试完成版本的游戏后,打开场景“TheTrack”。此场景包括赛车游戏所需的内容,但是最重要的部分——赛车不在场景中。

         现在,拖动赛车模型到场景中。在Project视图中,可以在Models/catamount中找到它。

         赛车所处的位置将是拖动释放的位置,游戏制作者或许需要去调整赛车的位置以适合赛道。可以使用Inspector进行调整,设置为860,102.3,878,旋转Y轴为130.

         在后面的教程中,此游戏物体将特指“Car赛车”物体。

         赛车就是一个3D模型,如果在Inspector中查看,将看到赛车将包含一组子物体,如赛车车体、车窗和车轮。它还包括两个简单的网格物体用于制作赛车碰撞。不用担心现在这两个网格物体可见,后面将做修改。花一些时间查看赛车的组织结构,注意在Hierarchy视图中查看它们彼此是如何关联的。

          因为某些原因,我们应该将赛车放入某个单独的层。保持赛车游戏物体的被选择,在Inspector视图中的层下拉列表中选择“Car”层。在弹出的对话框中单击“Yes,change children”(是的,改变子物体),以将层的修改应用到赛车体系中的所有子物体上。

          默认情况下,赛车游戏物体具有Animation成分,因为将来并不会使用到该成分,所以将该成分删除。点击Animation成分最右侧的小齿轮图标,选择“Remove Component”。

 楼主| 发表于 2012-9-22 21:50:19 | 显示全部楼层
现在,将为赛车添加碰撞成分,以确保赛车在场景中飞驰时不要穿过地面。为了不在真实的赛车网格物体上使用复杂的网格碰撞,我们设置了两个非常简单的网格物体对赛车进行了替代,它们安装在赛车的顶部和底部。因为性能的原因,我们将使用这两个网格物体作为碰撞模型。

   l单击赛车体系中的Collider_Bottom子物体

  l选择Component》Physics菜单下的MeshCollider,以添加此成分给选中的游戏物体。

  l在新增的MeshCollider成分中点击Material下拉选择框,选择Car (physics material)物理材质。

  l选择以下两个复选框,Smooth Sphere Collisions 和 Convex。

  l因为这两个碰撞体要在游戏中不可见,因此,要在游戏物体上删除 MeshRenderer 和MeshFilter这两个成分(单击成分右侧的小齿轮,选择“Remove Component”)。

  l针对Collider_Top游戏物体做上述同样的操作。
 楼主| 发表于 2012-9-22 21:50:35 | 显示全部楼层
为赛车模型改变阴影设置有两个原因。第一个是因为性能原因,不需要物体有特别清晰有效的自身阴影和接受阴影(First of all turning off shadow casting or receiving for objects that don’t really need it is very good practice for performance reasons.)。第二个原因是有阴影要比没阴影的效果更好一些。当赛车在建筑物体之间高速飞驰时,时有时无的阴影看起来就会更真实。实现什么样的效果完全由你做主,如果想得到非常真实的阴影效果,也是完全有可能,只需要改变阴影的设置。

       针对赛车不同组成部分所使用的设置如下:

       Body(车体): Cast Shadows enabled. Receive Shadows disabled.

Bottom Interior(车体内部): Cast Shadows enabled. Receive Shadows disabled.

Car_Glass(赛车车窗): Cast and Receive Shadows disabled

DiscBrakes(碟式刹车): Cast and Receive Shadows disabled

Wheels(车轮): Cast Shadows enabled. Receive shadows disabled.
 楼主| 发表于 2012-9-22 21:51:14 | 显示全部楼层
现在,开始为Car游戏物体添加必要的成分,使它成为真正的可工作的赛车。
        首先,我们需要使用物理学仿真技术在空间中控制赛车的位置,内置的RigiBody成分可以完美的实现上述需要。
l选择Car游戏物体,选择Component》Physics》RigidBody菜单命令。
l接受Unity提供的信息,关于丢失预制物体链接的,并注意游戏物体上如何附着了一个像其他成分一样的RigidBody成分。
l赛车的自重是明显超过1公斤的,所以要调整Rigidbody中mass到大概1500数值。
l接下来是drag和angular Drag 属性,它们将强制Rigidbody的速度和旋转逐渐放慢。我们将通过脚本控制赛车的drag(阻力),所以此处将drag和angularDrag属性都设为0。
l在scripts/JavaScripts文件中找到Car.js脚本,拖曳到Car游戏物体上,这个脚本就是赛车的“引擎”。此脚本我们将在本教程的最后集中去解释。
Car脚本成分中包含很多变量,在我们开始调整赛车,以及运行代码时将解释这些变量。现在,只需要设置必要的数值,以使赛车能快速进行测试。
l首先,赛车脚本需要了解赛车所具有的车轮情况。在Inspector中,将看到Front Wheels和Rear Wheels,点击名称左侧的小三角可以展开它们。
l设置前后轮胎的size 为2,为前后两个轮胎设置room(空间)。
l现在在Inspector中展开WheelFL, WheelFR, WheelRLWheelRR将看到它们每一个都具有一个discBrake为子物体,每一个discBrake都具有一个wheel为子物体。现在游戏制作者将清楚地看到由刹车碟片和轮胎游戏物体组成了整个车轮的图示。
l拖动DiscBrakeFL DiscBrakeFR到Car脚本的Front Wheels下面的两个开放接口处。拖动DiscBrakeRL DiscBrakeRR到Rear Wheels的接口处。
l或许游戏制作者会问:为什么用DiskBrakes作为车轮?解释非常简单:碟片刹车是轮胎的父物体,所以设置刹车碟片为车轮就包含了轮胎。
 楼主| 发表于 2012-9-22 21:51:37 | 显示全部楼层
如果在项目中阴影是可用的,那么方向灯将给赛车在公路上制作一个细微的阴影(完全遮挡了地面图像)。但是,我们要给赛车下面添加的是还能看到地面上图像的阴影。   因此,我们将要用一个投影仪来投射产生一个模糊阴影,类似赛车的外形,在赛车的下面的路面上。 
  投影仪是内置成分,工作类似真实的投影仪。游戏制作者设定需要投射的纹理,基于投影仪成分的设置和到目标物体的距离,它将把纹理绘制到适合的物体上。 
  在Hierarchy中,创建一个空的游戏物体,拖动到赛车物体上,使其成为赛车的子物体。 
  命名为"Blob shadow projector" 
  添加一个Projector成分给刚创建的Blob shadow projector物体(Component->Renderer->Projector)。 
  设置projector的Near Clip Plane为0.1,Far Clip Plane为50,Field of View 为 30。
  将Blob_shadow材质赋值给Material接口。 
  在"Ignore Layers"选择"Everything",然后不要选择"Road"层,这将确保投影仪只把模糊阴影投射到路面上,其他层上没有。 
  附加上BlobShadowController.js脚本(在Project视图中的Scripts/CSharpScripts文件夹中)。 
  控制脚本非常的简单。意思是:将投影仪放置啊在赛车上方10米处,投影仪将基于赛车的旋转而旋转。游戏制作者可以查看一下脚本,然后尝试修改数值,如果想让投射到路面上的模糊阴影看起来有所不同。
 楼主| 发表于 2012-9-22 21:52:12 | 显示全部楼层
有些事情将使驾驶赛车非常有乐趣,比如高速滑过街角或者做U型转弯。要增加轮胎在路上滑动的效果,并使它非常可信,我们将在马路表面,在赛车滑动时增加一些刹车痕迹。  设置刹车痕迹的方法是使用一个脚本去控制场景中全部的刹车痕迹,这个脚本控制将负责产生网格(物体),籍此来描绘刹车痕迹。每一个轮胎都知道它自己所在的位置,不管其是否在进行滑动。我们利用上述信息可以在世界空间记录一个点,从此点开始与刹车痕迹产生关系并进行控制。我们将使每个轮胎从前面刹车痕迹记录点开始保持运行轨迹,所以几个轮胎的刹车痕迹不会混淆。
  我们已经为此创建了一个预制物体,只需要拖曳到场景中即可。
  从Prefabs->VFX->Skidmarks中拖曳Skidmarks预制物体到场景中。
  我们通过调整每个顶点产生的颜色来设置刹车痕迹的强度。强度被用于表明轮胎刹住的强弱情况。要产生这样的效果,我们将采用一个用户自定义的着色器,该着色器在渲染刹车痕迹时将使用每个顶点的alpha通道。
  此处有多个选项可以修改刹车痕迹,从而使它更好的匹配赛车。查看Skidmarks游戏物体上所附着的Skidmarks成分,将会看到有一些公共变量可以用于调整痕迹效果。

编辑:张锡  来源:中国青年网
 楼主| 发表于 2012-9-22 21:52:52 | 显示全部楼层
最大痕迹长度
  Max Marks变量决定任何时候场景中存在的刹车痕迹的位置(最大长度)数值,所有的车轮使用同一的Skidmarks,所以这个数值对所有车轮都有效。不论最大的数值是否达到,先产生的痕迹都将被后面的覆盖。
  增加此数值将同时增加在场景中所有刹车痕迹混合的长度。
  痕迹宽度
  Mark Width用于设置刹车痕迹的宽度。此数值的设置必须符合车辆的车轮所产生的痕迹宽度。如果是重型货车,则设置为非常宽的刹车痕迹是比较适合的;如果是超音速赛车,具有很薄的车胎用于创造地面速度记录,则非常窄的刹车痕迹将更合理一些。
  地面位移
  当用于表现刹车痕迹的网格物体被创建时,为放置刹车痕迹斑块的网格物体将依据从车轮处计算出来的点处被创建。这些点通常会在表面的上方,即使车轮正在行驶中发生滑动。当两个网格物体被渲染时,它们正好交替处于上方,这将可能在游戏中产生一些闪烁的不良结果。
  要防止这样的事情发生,所以引入Ground Offset 变量。被创建的网格物体将沿着已创建的表面法线方向,按照设定的位移数值进行提高。所以如果有闪烁出现,或者刹车痕迹与表面相交叉,则尝试增加位移的数值。
  为了进一步确保刹车痕迹在地面的上方被渲染,刹车痕迹所用到的着色器将被设定一个位移数值,并且被分配给另一个渲染序列,而不是使用标准的渲染序列。
  最小距离
  当一个新的点(刹车点)被添加到SkidmarkController中,它必须保持与同一个车轮所产生的最后刹车点一定的距离,这个距离由Min Distance设定。这将确保在一个很小的区域内不会为产生刹车痕迹额外的浪费刹车点。不过不要将此数值设置的过高,因为这可能导致刹车痕迹的斑块过长,除此之外,增长的距离可能显得有延迟,刹车痕迹将显示在车轮的后面。减小这个数值将会在一定的范围内,平滑刹车痕迹,同时使刹车痕迹离车轮更近地被创建。
  纹理
  重型卡车轮胎所用的轮胎图案与竞速赛车轮胎所用的轮胎图案是有很大区别的。刹车痕迹所使用的纹理类似由车轮的轮胎图案在地面上产生的痕迹。如果创建其他类型的赛车,具有不一样的车轮,则需要更改纹理,以匹配车轮所产生的刹车痕迹。
 楼主| 发表于 2012-9-22 21:53:49 | 显示全部楼层
添加SoundController.js脚本给Car游戏物体(从Scripts/JavaScripts中拖动到游戏物体上)。  Sound Controller成分针对音效有几个接口,因此我们可以赋予不同的音效文件。音效文件存放在Project视图Sound/Car中。拖动以下文件到相应接口。
  oCarEngine_D_upper-register to the D slot.
  Set the Volume to 0.565
  CarEngine_E_midlow-register to the E
  slot. Set the Volume to 0.8
  CarEngine_F_midhigh-register to the F
  slot. Set the Volume to 0.78
  CarEngine_K_passing-rush to the K slot.
  Set the Volume to 0.565
  CarEngine_L_lower-register to the L slot. Set the Volume to 0.71
  Wind-loop_stereo_22khz_16bit to the Wind slot. Set the to Volume 0.8
  CarEngine_DEFL_tunnel-add_small to the Tunnel Sound slot. Set the Volume to 0.8
  Collision1 to the Crash Low Speed Sound slot. Set the Volume to 0.8
  Car_crash1_smaller to the Crash High Speed Sound slot. Set the Volume to 0.5
  Car_skid1 to the Skid Sound slot
  CarTutorialSong to the Background Music slot. Set the Volume to 1.
  此处音量设置只是建议数值,用户可以尝试以不同的数值进行播放,以按照需求得到合适的数值。或者,可以更进一步针对音效设计自己的音量设置界面,这样就可以在游戏运行时调整音乐和音效的音量。

 楼主| 发表于 2012-9-22 21:55:08 | 显示全部楼层
拖曳下列脚本到Car游戏物体上。

  LightmapperObjectUV.js (from scripts/JavaScripts)

  CrashController.js from (scripts/JavaScripts)

  Generate2DReflection.cs (from Scripts/CSharpScripts)

  在我们尝试测试刚创建的游戏之前,我们需要做的最后一件事情,就是要让摄像机知道该看什么,跟随什么,否则,一旦我们开始驱动赛车,就将跑出场景以外。

  选择Main_Camera游戏物体,设置它的Target(目标)(在Car Camera脚本成分中)是Car游戏物体。

  至此,完成整个场景和Car物体的参数设置。下一环节将开始调整赛车。
Part2 调整赛车  质量中心
  悬挂
  悬挂范围
  悬挂弹簧
  悬挂减震
  Drag Multiplier
  速度,转向和传动
  数据包形式输出赛车
  质量中心
  创建一个新的游戏物体,拖曳它到Car游戏物体内,使其成为子物体。
  将其重命名为CenterOfMass。
  重新设置CenterOfMass的变换。(点击Transform右侧的小齿轮,选择"Reset",这将给予其与父物体,即赛车同样的位置)。
  再按照喜好调整重心的位置,可以拖曳它,或者输入位置数值。赛车重心较好的位置数值是(0,0.1,0.65)。
  在Inspector中,将CenterOfMass赋给Car脚本成分中的重心接口。
  一般情况下,将质量重心放在X轴的任一边都是不好的主意,因为这会导致转向行为古怪,所以我们将 X 位置变量设为 0.
  游戏制作者也可以更改摄像机的目标物体,从Car游戏物体改为CenterOfMass游戏物体。这将给与一点不同的感觉,运行游戏,根据爱好决定摄像机关注的游戏物体。
 楼主| 发表于 2012-9-22 21:56:16 | 显示全部楼层
悬挂  另一个对赛车行为有很大影响的因素是赛车的悬挂系统。赛车悬挂系统的工作是使车胎和赛道表面的摩擦力最大化。当游戏制作者在凸起路面上驾驶赛车时,所有的车轮垂直能量都将传递到赛车框架上。如果赛车没有"中介结构",将直接导致赛车非常容易地完全脱离赛道,然后因为受到重力作用所以很直接的落回赛道。悬挂系统就是所谓的"中介结构"。
  在Inspector中,有三个不同变量用于调整(悬挂)--range(范围)、damper(减震)和spring(弹簧)。它们是应用在赛车轮胎上的WheelCollider类的组成部分。
  左图是标准设置下的赛车图示,右图是悬挂range参数非常大的情况下赛车图示。在spring和damper属性的混合作用下,游戏制作者能模拟出从赛车到卡车之间任意悬挂设置。当然,显卡必须能符合这些设置,从而让人信服。
  悬挂范围
  悬挂可变化的长度范围,从最大压缩到其离赛车框架最大距离之间的范围。
  悬挂弹簧
  此数值设置悬挂弹簧的阻尼。设置其非常高则表示悬挂完全展开,此时轮胎将远离赛车框架;如果设置为非常低则表示悬挂非常软(bouncy)。在调整此数值时,它将抵消赛车的质量(also has a lot to say here)。非常重的赛车的弹簧需要比非常轻的赛车阻尼大很多。一般情况下,我们将设置后悬挂弹簧的阻尼小于前悬挂,因为赛车的质量中心设置比较靠前,所以前面需要更好的悬挂。在前后悬挂上使用不同数值进行测试,可以得到完全不同的结果。
  悬挂减震
  减震在悬挂中帮助控制运动状态。没有减震,悬挂弹簧将在失去控制的状态下扩张且释放能量-它将在自然弹性比率下扩展直到存储的能量全部被释放掉。这将导致阻尼并且不能控制赛车。Damper或者shock The damper or shock controller turns the unwanted kinetic energy into heat that gets transferred away in the hydraulic fl uid, making the ride a lot smoother.

 楼主| 发表于 2012-9-22 21:58:07 | 显示全部楼层
Drag Multiplier  当我们将刚体成分附着给赛车物体,可以看到刚体成分具有一个 drag属性。Drag(拖动)属性是摩擦力或者空气阻力,它影响着刚体,使其难以移动。
  通过创建自己的Drag multiplier属性来代替rigidbody中的drag 属性。在Inspector中查看一下Car脚本成分,可以看到Drag Multiplier变量,它是具有X、Y、Z的一个向量。这将使我们可以从前面,侧面和顶部设置不同的拖动数值,mimicking the real conditions when driving a car more accurately.                                                                                                                        
  X数值表示侧面拖动力
  Y数值表示顶部拖动力
  Z数值表示前部拖动力
  X数值非常重要在控制重力
速度,转向和传动
  控制转向,我们具有两个变量-Maximum Turn 和 Minimum Turn,都是数值变量,用于控制赛车如何转向。高数值表示转向灵活,低数值表示转向很小。我们在赛车脚本中同时用到这两个变量以修改赛车在不同速度下的转向灵活性。
  在非常低的速度下,转向将使用Maximum Turn中设置的数值。
  在非常高的速度下,转向将使用Minimum Turn中设置的数值。
  在针对赛车使用这样默认的数值(10 for minimum and 15 for maximum)时,为什么按照上述情况设置呢?是因为赛车速度越快转向越困难。上面的设置可以带来更真实的体验,确保游戏玩家不能在全速情况下进入一个急转弯并且轻易操控汽车穿过它。游戏制作者可以试验着调整这两个数值,以使赛车在转向时可以更好或者更差,以在低速行驶以及快速变快或者变慢中制作不同的转向体验。
  最后我们解释Number Of Gears变量。
数据包形式输出赛车
  如果学员是跟随课程并且已经组装了自己版本的赛车,现在,学员要掌握的知识是在自己的项目中实现这个游戏。最简单的实现办法是:在项目中,把需要的预制物体包装成一个Unity数据包,然后将它传递到其他项目中。
  首先,将所制作的赛车物体置入一个预制物体中,这样它可以被复用,而且不用重新装配和调整。
  在Project视图中,点击"Create"然后选择"Prefab"。将在Project视图中的看到一个空的"new prefab"物体。
  将空白的预制物体重命名为"Race Car"(非常贴切的名称)或者其他任何所喜欢的名称。
  从Hierarchy视图中拖曳赛车游戏物体到预制物体的上面。
  尽管在(Prefabs/Car)中已经为用户制作了预制物体,但是现在用户也将拥有自己制作的。
  要保障赛车能工作,则有些内容作为Car预制物体的组成部分,也要一同创建到数据包中。包括:Skidmarks, Main_Camera和Directional_Light_Car_Road。幸运地他们都已经被置入Prefabs中。
  还有一些脚本需要包含在数据包中,必须逐个指定,包括:SoundToggler.js,ImageEffects.cs和ImageEffectsBase.cs。这些脚本不会包含在场景中,但是在游戏运行时会用到这些脚本。有关图像的脚本包含在"Pro Standard Assets"中,也需要把它们包含在数据包中,这样才能被引入到完全空白的项目中发挥作用。
  在Project视图中选择这些项目:
  Prefabs/VFX: Directional_Light_Car_Road, Main_Camera,Skidmarks
  scripts/Javascripts: SoundToggler.js
  Pro Standard Assets/Image Based/ImageEffects.cs 和ImageEffectsBase.cs
  前面创建的Car Prefab。
  点击"Export package…."
  在弹出的对话框中确保应该包含的项目都被选择。根据选择的项目所涉及的全部素材,除了脚本中调用的素材,都将被包含到数据包中。
  点击"Export",为数据包命名后保存它。
  将Car数据包引入自己的项目,过程很简单:
  在新项目中,选择Assets->Import package...
  找到保存的数据包文件,引入它。
  确保所有项目被选择,然后点击Import。
  Unity将引入所有的素材,Car Prefabs将显示在Project视图中,可以把它拖入场景中使用。
  用户已经完全可以在自己的项目中自由的使用赛车了,现在,你已经具备了合并赛车,调整赛车和在项目中传递赛车数据等知识。继续向前吧,制作一款真正的了不起的赛车游戏吧。
 楼主| 发表于 2012-9-22 21:58:35 | 显示全部楼层
  Part3 赛车的背后
  什么是最重要的事情?
  Start() - the Setup 5
  SetupWheelColliders() 5
  SetupWheelFrictionCurve() 6
  SetupWheel() 6
  SetupCenterOfMass() 7
  SetupGears() 8
  SetUpSkidmarks() 8
  Update() 9
  GetInput() 9
  CheckHandbrake() 10
  StopHandbraking() 10
  Check_If_Car_Is_Flipped() 11
  FlipCar() 11
  UpdateWheelGraphics() 11
  UpdateGear() 13
  FixedUpdate() - All your physics are belong
  to me 13
  UpdateDrag() 13
  UpdateFriction() 15
  CalculateEnginePower() 16
  CalculateState() 17
  ApplyThrottle() 18
  ApplySteering() 20
  EvaluateSpeedToTurn() 20
  Real Physics Model 24
  The included Prefabs 24
  The included scripts 25
  Part3 赛车的背后
  教程已经介绍了如何依靠3D模型,脚本和内置成分去组装一个可工作的赛车,也看到了外部变量,以及如何通过它们去调整赛车的行为。
  现在,是时候去深入了解一下汽车引擎里面的精密设备了--赛车脚本。
  在Car.js上双击即可在代码编辑中打开该脚本。
  这个脚本最初看起来有些吓人,超过500行的代码和注释,具有一堆的变量和函数。不过不用担心,这个脚本是结构化的,可以分解成小的函数,并具有见名知意的名称。因此,在注解的情况下代码很容易被理解,就如同在讲故事一样。
  我们建议读者找到最佳的入口点,然后依次序阅读。一般情况下,入口点会是Start(), Update() 和 FixedUpdate() 函数。
  每一个"main"函数都将调用其他函数,所以,我们先查看Start()函数,可以看到第一个被调用的函数为SetupWheelColliders(),在代码中锁定该函数,分析它的作用,然后返回Start(),进入下一个函数SetupCenterOfMass()。通过分析代码,你可以大致了解代码真实作用,代码将使赛车工作起来。
  下面我们将查看全部函数。我们不会解释每一行语句,但是我们将提供入口点,并介绍每个函数的要点,but we are providing an entry point and going through everything essential that takes place from the setup to what happens each frame所以言归正传,让我们开始吧。
  什么是最重要的事情?
  在Unity中工作,很多方面是很简单的,比如灵活的编辑器,拖曳式工作流程和所有内置的成分。设置赛车有一半的工作是可以很简单的完成的,Unity会优化引入的模型,我们只要简单的点几下就可以增加例如碰撞、渲染和物理学等成分。
  在我们的脚本中,大多数是控制以上这几个成分。用户将看到这些成分很多的计算,以决定赛车的行为。这是游戏中不可避免的部分:当你想做得复杂点,就不得不在过程中设置多一些逻辑判断。通过计算,将适当的数值反馈给成分。
  如果你感到被代码所淹没了,不知道从哪开始,有一种方法可以采用,就是把注意力集中在以下项目上,并考虑还会有其他的什么内容会影响和支持这些项目:
  Rigidbody 刚体
  Wheel Colliders 车轮碰撞体
  计算和做计算的顺序
  考虑以下内容:
  通过给我们的赛车模型添加Rigidbody刚体成分,这样就可以以物理方式去控制赛车。通过计算力量我们可以控制赛车向前,以及赛车慢慢停下来。
  通过增加Wheel Colliders 车轮碰撞,我们可以控制赛车在哪里接触路面?
  Start()设置
  此处我们将对赛车做必要的初始化工作。Start()函数只执行一次。
发表于 2013-9-30 16:10:29 | 显示全部楼层
支持好东西,必须学习,必须顶
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 04:11

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表