Unity官网赛车教程第二部分—调整赛车

在Unity中创建一个赛车游戏


CarTutorialSection_21.jpg

第二部分:调整赛车

完成了教程的上一步之后,赛车已经有了不错的效果。但在赛道跑上几圈,我们明显的感觉到赛车不太完美,仍需改进。

现在我们开始优化,当我们开发游戏时,好的优化将会使我们的游戏更加有趣,具有挑战性,更加完美,除此以外,还能达到我们的其他目标。具体来说,当我们初步完成游戏并开始测试时,多多少少有些地方不尽如人意。比如说我们希望使赛车的操作更加顺畅,最高速度更快,场景的光照更加充沛一点。

强大的优化能力是Unity的一大特长,我们在inspector中可以修改public变量。更强大的是,但我们运行游戏时,可以更改其中的变量,并实时看到变化。而不是每更改一个变量就要重新编译一次。


重心

  现在最迫切的问题就是翻滚了,在转弯的时候,赛车十分容易发生翻滚(如果你还没有测试过,那请在游戏中加速转弯,你会发现赛车很容易出现这种情况)。原因是我们没有定义赛车的重心。对于赛车刚体来说,所有力都施加在它的重心(译者注:并非如此,作者此处可能做了简化处理)。Unity会依照添加到刚体(Rigidbody)的碰撞器(Collider)计算刚体的重心,所以它可能会在赛车游戏对象或它的子对象中。鉴于重心并不在赛车的中心(可能也不在Unity计算的中心),所以我们需要做一些调整。

CarTutorialSection_22.jpg

汽车的重心通常在引擎位置和一些其他因素决定,不同的车辆的重心差异很大。在这个教程中,赛车重心在引擎的下方不远,地面的上方。如图片所示。






1.建立一个新的GameObject,并添加到Car gameobject中(成为子对象)。

2.重命名为CenterOfMass

3.重置CenterOfMass的变换属性(在InspectorTransform面板中点击右侧的锯齿状按钮,

打开下拉菜单,选择“Reset”,这个操作将会将父对象(Car)的属性赋予给它)。

4.通过移动对象或输入坐标调整它到你想要的地方。或者参考下面这个位置(0,0.1,0.65)。

5.Inspector中,将CenterOfMass拖拽到Carscript组件的对应属性中。




通常来说,将重心偏离赛车的对称面会产生一些古怪的效果,所以我们需要将X变量设置为0.

我们需要将摄像机目标设置为CenterOfMass游戏对象。这可能会和设置为Car有些不同,但不会带来很大变化。体验这两种方式,并选择一个自己喜欢的设置。






悬挂系统

悬挂是另一个影响赛车的重要因素,它的功能是使轮胎和地面之间的摩擦力达到最大。但我们的赛车经过突起的路面时,轮胎上所有垂直方向的能量将会转化给车身。如果没有悬挂这种交互部件,那么轮胎会轻易离开地面,然后受重力作用于地面发生碰撞。

CarTutorialSection_24.jpg

CarTutorialSection_23.jpg


















在Inspector中,有3个变量可供调整:幅度(range),阻尼器(damper),弹簧(spring)。它们在刹车轮胎的WhellCollider类中。

在上图中,左边是赛车的标准设置,右边中的赛车有一个很大的悬挂幅度。结合幅度,阻尼,弹簧这个三个属性,我们可以逼真的模拟从一级方程式赛车到怪物卡车的不同车辆,当然,我们的模型和动画也需要和这些设置完美匹配,以获得最佳效果。


悬挂幅度

这是悬挂被完全压缩到立车最远时的距离。



悬挂弹簧


这里的变量决定了弹簧的劲度系数,当它的值被设置得很大时,悬挂更容易完全伸展,轮胎和车身会有较大的距离;但它被设置的很低时,悬挂系统更具有弹性。设置这个变量时,需要考虑到赛车的重量,一辆很重的赛车比很轻的赛车需要更硬度系数更高的弹簧。通常,我们将前轮的悬挂系统较后轮设置得更硬,因为赛车的重心偏前部,那里需要更硬的悬挂。到这里,请读者尝试不同的设置,并在游戏中体验不同悬挂效果。


悬挂阻尼

阻尼用于控制悬挂的运动。如果没有阻尼器,悬挂系统的弹簧会不停的压缩,伸长直到弹簧中的机械能用尽。这会使赛车不停的弹跳并难以控制。阻尼器或震动控制器将那些没有用的机械能转化为内能,并传递到到液压机液体中(hydraulic fluid),使赛车更加流畅。


阻力乘数

当我们给赛车添加刚体属性时,我们就考虑过阻力属性,这种阻力是外接施加给刚体的摩擦力或空气阻力,阻碍它的运动。但我们设计赛车外形时,都会考虑到空气动力学因素,减少赛车的空气阻力。所以我们也应该将外形考


虑在内,在三个视图中观察我们的模型,它是流线型的。

我们通过自己创建的阻力乘数属性代替刚体的属性设置阻力属性。在Inspector的Car script中找到Drag Multiple变量,它有x,y和z三个数值。这使我们有足够的自由分别设置前面,侧面,顶部的阻力,使赛车的驾驶更加真实。



•        X数值是侧面的阻力

•        Y数值是顶部的阻力

CarTutorialSection_25.jpg

•        Z数值是前面的阻力



X数值对应的阻力防止赛车在转弯的时候发生侧滑。X数值越大,转弯的

难度越大。

Z数值可以增加或者减少影响赛车速度的阻力,调整它的数值会很有趣。如果数值小于1,加速度和最高时速会更大;如果数值大于1,赛车不得不努力挣脱强大的阻力,速度自然变慢。这个数值十分敏感,我一我们建议调整这个数值时,使用更小的变化量。

因为赛车只是在赛道上运动,所以我们对它不太感兴趣。因为在Y轴上最重要的力是施加在刚体上的重力。



速度,转弯和传动转置

现在我们开始调整更加直观的变量,他们对我们赛车也有很大的影响。

调整最高时速无需太多的思考,这决定了赛车行进的速度。因为我们赛车模型比实际中简单多了,除了阻力之外,我们无需为赛车加速设置其他参数。最高时速也不是直接影响因素。设置这个参数更高会使我们赛车速度更高,反之亦然。如果你想得到一个很高的速度,可以同时调整最高时速和Z轴的阻力数值。

对于转弯设置,我们有两个变量,最大转弯属性(Maximum Turn)和最小转弯属性(Minimum Turn),它们共同决定赛车转弯的性能。把它们设置的很高,我们可以获得很好的转弯体验,反之亦然。我们在Car script中依照汽车的速度设置这些数值。





•               在很低的速度时,我们在转弯中使用最大转弯属性(Maximum Turn)


•                在很高的速度时,我们在转弯中使用最大转弯属性(Minimum  Turn)





当使用默认数值时(最小10,最大15),速度越大,转弯越困难。这种体验十分真实,想象下,我们不可能在赛车处于最高速度时进入发卡弯,并希望它可以顺利通过。我们可以设置不同的参数,得到不同的过弯体验。

最后我们设置档位数目变量(Number Of Gears)。在后面的部分中,我们将研究他在Car script中的作用。因为我们的模型并不是真正的车辆,所以我们也不会模拟真正赛车的档位。不过我们使用它模拟引擎的动力,以及对声音的控制(这个好像更重要)。我们通过它的大小调整声音表现引擎的动力,模拟在每一个档位中,开始时转速较低,然后增加转速,到达极限并切换到下一个档位。这个参数通过不同的声音模拟不同的档位。

将赛车以package导出

如果你按照上面的步骤设置了你自己的赛车,那我们应该学习如何将它导入到我们自己的项目中,一个简单的方法就是将我们的Prefabs做成Unity Package。



首先我们先将我们的赛车整合到Prefab中,下次我们就不必再次组转和调试。





•       在项目(project)面板中,点击“create”选择“Prefab”,我们会得到一个名字为“newprefab”的空的Prefab

•       将Prefab命名为‘RaceCar’或其他你喜欢的名字。


•       将Car  GameObject拖拽到Prefab中



虽然这一步已经做好了,但我们需要自己动手创建一个。



在我们创建package过程中,在CarPrefab里,我们需要除去一些组件

(Skidmarks,Main_Camera 和 Directional_Light_Car_Road.),使我

们得到一个纯净的赛车。


另外,我们还需要添加一些脚本到我们的package中(如果我们不指定它们不会被导出),包括SoundToggler.js,ImageEffects.cs 和ImageEffectsBase.cs它们虽然没有在场景中使用,但是在游戏代码中用到。Pro Assets中含有imagescripts,但是我们还是要导出它,以便我们在空白的项目中用到它。

CarTutorialSection_26.jpg




• 在项目(Project)面板中我们选择以下对象


•       Prefabs/VFX: Directional_Light_Car_Road,Main_Camera,


Skidmarks


•        scripts/Javascripts:SoundToggler.js


•        ProStandard Assets/Image Based/ImageEffects.cs 和


ImageEffectsBase.cs


•      你创建的Car Prefab.


•      点击 ‘Export package...’


•      在弹出对话框中确定选中 “Include dependencies”。这个设置将会导出你选中的那些在代码中用到的资源


•      点击导出,并保存。





在你自己的项目中使用Car十分轻松


•      在你的项目中点击 Assets->Import package...


•      选择到你的包并导入。


•       确保每一项都被选中,导入他们


•      Unity会导入prefab中的所用资源,接下来就可以使用了





这个car prefab 是完全免费的,你可以随意使用。现在我们学习了如何将汽车组装,调试,并且导出package,在不同的项目中使用。接下来,我们将会学习更加有趣,具有挑战性的内容。


  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络视频资源,如有侵权请留言/举报,资源过大上传乃是下载链接!!!------ 『课程介绍』:1 S/ V q2 z {+ ~( j 相信男生们都喜欢玩爽快的赛车类游戏,那么你是否想要自己开发这样的一款游戏呢?在这里你将使用unity的开发技术,自己创建一个开发的,竞争性的赛车世界。同时可以让用户对汽进行换装。- P8 z# u5 t' z1 @' w# c - F1 c. D: y3 c: o 『课程目录』: 任务1: 游戏演示 04:01 任务2: 创建工程,添加环境,添加. n& c' W: j) [0 N 06:07 任务3: 给添加碰撞器1 k: n' t- s0 ?7 _- |: }' e! O 03:17 任务4: 的阴影设置* J, e. b0 _1 P( A7 C' x 03:29 任务5: 给添加投影/ a5 \& I9 i& ~% d- R4 O 07:47 任务6: 关于WheelCollider轮碰撞器% ^2 O% b' E" ?; U) K7 L1 O 06:10 任务7: 给子添加轮 05:29 任务8: 控制子的前后行进 任务9: 控制子的左右转向 04:51 # C6 v5 _/ O1 V& q5 c 任务10: 控制摄像机的跟随移动2 J( j: W' N3 D( y) B 06:51 任务11: 控制摄像机的平滑跟随5 d( P' H# L' |9 F: R7 F+ p 09:31 任务12: 解决子侧翻的问题7 l" J8 q3 T: u! V 06:01 3 {1 V6 c8 K% c6 B/ ?" O+ C 任务13: 显示子的速度( c2 L4 C& @" T, I+ f- J$ E 13:24 任务14: 使用仪表盘显示速度# J/ n; ~/ R7 | 12:18 8 v+ V8 u4 x0 J, O8 M+ ? 任务15: 控制轮子的转动- M* [) D$ D; I* z" ~1 A 08:22 任务16: 控制轮子的转向 06:08 任务17: 控制的最大速度和最小速度; u+ p" j$ z" A; h ? 08:42 任务18: 给添加刹的功能3 M* x1 q6 ^2 r' \ 05:26 任务19: 给游戏添加背景声音 03:21 3 m0 A* G' S+ Z 任务20: 给子添加引擎声音$ F4 O8 y# Z7 ~: M9 u 07:02 + W$ S* Z" i/ h$ Q 任务21: 添加引擎加速效果的声音7 p' T8 }) r- |, M 07:34 任务22: 控制子的漂移 05:48 任务23: 添加漂移的声音! j" b* {, k) T, F: } 02:42 + {5 J, }5 K* }* j5 `; i6 O | 任务24: 添加漂移的条件,判断轮子是否着地 07:02 任务25: 添加倒的警示灯 04:41 任务26: 添加赛车到达终点的判定 11:57 ' D3 e) h1 i2 J4 ?/ E 任务27: 添加倒计时效果! x, y6 I( y! ?9 j- @; E$ ?! I 07:27 ! J0 F9 H; F% | 任务28: 开发计时期间的引擎发动效果5 \; v) f" w' F6 _! a+ g) ?2 B# o! i. M 10:16 任务29: 设计游戏开始的界面 07:02 1 r0 w- P; i# ^; l, c& E& I: a. H 任务30: 处理游戏用户名的存储和按钮的事件( O0 d7 p" _2 l, l4 l 06:06 5 {& N: C3 E* r; i5 n 任务31: 开发赛车选择界面, m; s q4 O# i1 {' v; p 10:44 任务32: 开发赛车的总用时计时 08:18 1 }$ x0 C% ^! i4 V7 k 任务33: 游戏数据的存储,把最快的时间存储起来 07:12 7 O) P8 \: C4 y9 r. D 任务34: 控制轮子位置随着悬挂系统的弹簧的伸缩而伸缩, d# `8 b5 x" j9 J 12:49 任务35: 添加子的划痕! L$ A. Y" b1 j- b1 U3 R 19:31 任务36: 处理子和墙体之间的碰撞! [5 I% d/ Z! M# ~: L8 g 04:21 . b) N! L% a% O! x 任务37: 实现第一人称视野的控制' n( R0 Y& h2 I4 C# _$ d 05:01 任务38: 学习Terraintoolkit地形编辑插件 10:23 ' w% J* U" f% y5 d3 b" l0 h8 r 任务39: 对代码进行结构优化 12:56 任务40: 修改赛车的控制方式,添加重力感应控制' {* c+ l( x" G, _( n4 N$ W 08:57 : H2 B! Y( w7 L- @. [" W: g \3 y; V) K 任务41: 控制不同平台下辆控制的启用, L9 n9 l3 T7 B J% C 03:54 任务42: 控制某些脚本得到物体的方式) c( U, m0 ?. Q; A 05:29 任务43: 控制场景的在安卓平台导入设置 05:24 任务44: 设计安卓平台的游戏环境,发布游戏到安卓平台2 ?, K% k; b1 @ 04:56 任务45: 项目结束分析,游戏项目结束
Unity3D赛车游戏可以通过使用Unity引擎的功能和脚本来创建。你可以使用Unity的物理引擎来模拟赛车的运动和碰撞,使用Unity的渲染功能来创建逼真的赛车场景和特效。 在游戏中,你可以创建赛车模型,并将其添加到场景中。你可以使用脚本来控制赛车的移动和操纵,例如使用键盘或触摸控制赛车的方向和速度。 你还可以创建赛车道路和赛道障碍物,使用Unity的碰撞检测功能来检测赛车与障碍物的碰撞,并实现相应的物理效果。 此外,你可以使用Unity的粒子系统来创建火花、烟雾和爆炸效果,以增加游戏的视觉效果。 综上所述,通过使用Unity引擎的功能和脚本,你可以创建一个逼真的赛车游戏,包括赛车模型、赛道、碰撞检测、物理效果和特效。希望这些信息能对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用Unity3D 自主实战开发的赛车游戏实例,关键点记录 (一)之赛车游戏总体介绍](https://blog.csdn.net/narutojzm1/article/details/51308894)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Unity3D赛车游戏+脚本基础](https://blog.csdn.net/m0_58367586/article/details/127901530)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值