EVP5 Unity5 汽车物理引擎demo分析


        阅读前需要先了解一下车、悬挂、驱动力、转向轮、驱动轮、轮胎摩擦、轮胎受力,以及什么是手刹等知识。

        unity5 使用了物理引擎physX 3.3的版本,在汽车的物理上还特别的制作了一下,通过Edy's Vehicle Physics 5.0的这个插件来分析一下它的汽车的物理是怎么写的,unity5在哪里加强了汽车的物理效果。(Unity5在制作的时候要把物理模型和材质系统分开位置放置,便于处理。)

        由外向内进行分析吧,看车挂了哪些脚本:transform和Rigidbody就不说了。

Vehicle Controller类:

        为了便于理解先科普一下维基百科中汽车的系统:电子刹车分配力系统(EBD, Electrical Brake Distribution)、防抱死刹车系统(ABS, Anti -lock Brake System)、循迹控制系统(TCS, Traction Control System)、车辆动态控制系统(VDC, Vehicle Dynamic Control)这几项。EBD调节制动力分配,以防止车辆后轮先抱死,一般情况下只有模块硬件出现故障时才会失效;ABS防止车轮抱死,通过计算出车辆滑移率,控制在峰值附着系数附近,这属于被动安全控制;TCS牵引力控制系统,作用工况通常为低附路面车辆地步时,深度油门,驱动轮滑转,TCS发出请求发动机降扭同时轻微施加制动,使得车辆平顺起步,目前标定车辆,可以达到在冰雪路面上全油门平顺起步;VDC车辆动态稳定控制系统,主要通过对单个车轮主动增压以纠正车轮的不足转向和过渡转向。TCS和VDC属于主动增压,即不用施加制动踏板力即可以对制动管路施加压力。ESP所需传感器包括:主缸压力传感器、四个轮速传感器、方向盘转角传感器、横摆角速度传感器、加速度传感器等。

        首先是个车轮信息的结构体Wheel,里面有车轮碰撞器WheelCollider(跟Unity4的几乎不兼容)的引用,车轮模型的transform引用(碰撞器跟模型不在一起),是否为牵引轮,是否为转向轮,是否可制动,是否可手刹制动。

        然后是一个类内部使用的轮结构体数据,这个轮的所有数据什么中心点坐标啦、碰撞体啦、WheelHit(WheelCollider报告的碰撞信息和车轮摩擦比较特殊是独立于物理摩擦单独计算的)啦、接触的地面材质啦、悬挂压缩系数啦、下压力啦、速度、当前速度、操纵力、是否在制动、最终计算值、轮胎打滑值、轮胎力、轮胎阻力、角速度、角位置(不知道为啥是个float值,等会看)、一个匹配变更时的物理材质、射线(用于轮胎印的精准定位)、轮胎打滑系数、下压力系数(会跟其他车轮均衡)。

        同名类,就不细看了,通过参数就知道这个类是干啥的了。茫茫多的面板参数。Wheel数组-保存车轮信息、处理和行为参数(中心点位置、轮胎摩擦系数、防滚系数、最大转向角、空气阻力、空气下压力、计算受力时的偏差距离修正值)、马达参数(最大前进速度、最大后退速度、最大驱动力、力的曲线形状系数、最大防滑系数、最大滑动驱动力系数)、制动参数(最大制动力、最大滑动制动力、制动模式、最大制动比、手刹模式、手刹最大滑动系数)、辅助驾驶参数(tcs、abs、esp的开关和系数)、车辆控制参数(输入转向参数、油门输入参数、制动输入参数、手刹输入参数)、车轮模型参数(旋转模式、车轮定位模式)、用于调试的视觉显隐参数(略)、用于实验的参数(睡眠系数、转向过速系数、当没有可用的地面材质时的两个默认抓地力参数)。

VehicleViewConfig类:

就是个控制视口的面板参数的类,调整摄像机视口的。

VehicleAudio类:

在Vehicle Controller对车辆进行控制的时候提供声音的支持。例如提供向前驱动的时候马达会响起来啦这种。

VehicleStandardInput类:

输入类,当我们在键盘上输入的时候,车辆的前进转向神马的,都是通过对Vehicle Controller类调用完成的。

VehicleDamage类:

车损类,当车辆发生碰撞时,对车体产生的形变是这个类完成的。由于车体没有骨骼动画,所以可以自由地控制模型点的位置,来完成动态的形变。由Vehicle Controller触发回调来通知损坏,损坏的位置点也由Vehicle Controller类提供。

VehicleTireEffects类:

轮胎特效类,车轮产生的烟尘等效果由这个类控制。

RigidbodyPause类:

还有个暂停物理世界的控制键类。


好了,基本一个车就这些代码就完成了车体的所有行为了,再就是UNITY5中的WheelCollider-特别准备的车轮物理体。

其实Vehicle Controller类的模拟车轮的大多数行为都是对WheelCollider参数的控制,所以Unity公司还是把持了车辆物理效果的底层,废话不多说我们看面板参数吧。

  • Mass:轮胎质量
  • Radius:轮胎半径
  • Wheel Damping Rate:车轮阻尼系数
  • Suspension Distance:悬挂距离
  • Force App Point Distance:受力点距离
  • Center:中心点
  • Suspension Spring:悬挂弹簧参数
    • Spring:弹力系数
    • Damper:阻力系数
    • Target Position:受力为0时的目标位置 角度/位置 的系数值
  • Forward Friction:正向摩擦
    • Extremum Slip:滑动摩擦极值
    • Extremum Value:滑动摩擦值
    • Asymptote Slip:滑动摩擦渐进系数
    • Asymptote Value:滑动摩擦渐进值
    • Stiffness:刚性系数
  • Sideways Friction:侧向摩擦
    • 参数同上
具体的效果还是测试出来的,毕竟只是提供了系数,目前位置官方的文档还不全,资料也很少。不过至少通过这个例子可以做一款车辆的游戏或应用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值