汽车怎么漂移

更新时间:2022-11-27 00:16:38 阅读: 评论:0


2022年11月27日发(作者:欧美在线a免费线上)

汽车轮⼦转动原理

1,加减档系统。所谓变速箱其实可以抽象为⼀个数组,每个数表⽰引擎⼒与轮⼦⼒的线性对应关系。汽车⼀般为6个档位,那么我们数组的

⼤⼩也应该是6。动⼒来⾃引擎,通过当前档位计算出轮⼦的⼒矩,从⽽使轮⼦转动。

另⼀⽅⾯我们捕获轮⼦的转速,通过当前档位再计算出引擎当前的转速。我们限定了引擎的最⼤与最⼩转速,规定:引擎达到最⼤转速的时

候,加档;减速到最⼩转速的时候,减档。这样就实现了汽车的⾃动加减档,当然也可以做成⼿动的。

2,unity3d的wheelCollider(轮⼦碰撞器)。我们可以通过给wheelCollider⼀个⼒,它就可以⾃动实现滚动的物理效果,同时,我们可以通

过代码捕获它的转速,这恰恰符合我们的要求。更强⼤的是,我们可以设置轮⼦的横向与纵向摩擦⼒,设置轮⼦的悬挂系统参数,通过这些

设置可以模拟汽车的避震,漂移等效果。

sionSpring悬挂系统;

dFriction轮⼦的纵向摩擦⼒(车⼦前进后退⽅向的摩擦⼒);

ysFriction轮⼦的横向摩擦⼒;

unSlip;ExtremumValue;AsymptoteSlip;AsymptoteValue这四个值其实是坐标系上的两个坐标,他们确定了⼀个滑动距

离与摩擦⼒的关系曲线。

essFactor可以整体调节摩擦曲线的倍数。

3,unity3d的Rigidbody(刚体)。我们可以赋予刚体质量,并且刚体是受重⼒影响的。车重的不同也会影响汽车的⾏驶效果!我们⼀般按

真实世界的数值来,例如汽车的mass我们可以设为6000左右(单位为kg),包括模型的尺⼨,也最好与真实尺⼨⼀致(单位为⽶)。这样

我们才能获得更真实的物理效果,下⾯分享⼀下关于unitywheelcollider轮⼦转动的主要代码。

usingUnityEngine;

tions;

publicclassCarControl:MonoBehaviour{

//操纵前轮,⽤于转向

publicWheelColliderFrontLeftWheel;

publicWheelColliderFrontRightWheel;

publicWheelColliderBackLeftWheel;

publicWheelColliderBackRightWheel;

//齿轮数组

publicfloat[]GearRatio;

//当前档位

publicintCurrentGear=0;

publicfloatEngineTorgue=600.0f;

publicfloatMaxEngineRPM=3000.0f;

publicfloatMinEngineRPM=1000.0f;

privatefloatEngineRPM=0.0f;

//Uthisforinitialization

voidStart(){

//设置车的重⼼,使车更稳定

Vector3centerOfMass=OfMass;

centerOfMass.y=-1.5f;

OfMass=centerOfMass;

}

//Updateiscalledonceperframe

voidUpdate(){

//限制车的最⼤速度,调整阻⼒可能不是最好的做法。但它很简单,⽽且不会⼲扰物理系统的运⾏。

=ude/250;

//通过两个轮⼦的平均rpm,计算引擎rpm,然后切换档位

EngineRPM=(+)/2*GearRatio[CurrentGear];

ShiftGears();

//设置换档的声⾳

=(EngineRPM/MaxEngineRPM)+1.0f;

if(>2.0)

{

=2.0f;

}

//最后设置轮⼦转动⼒矩。引擎⼒矩除以当前档位,乘以⽤户输⼊值。

//轮⼦⼒矩提供⼀个汽车前进的⼒。轮⼦的转动⼜会提⾼档位。

orque=EngineTorgue/GearRatio[CurrentGear]*s("Vertical");

orque=EngineTorgue/GearRatio[CurrentGear]*s("Vertical");

//转动⾓度是任意数乘以⽤户输⼊值

ngle=20*s("Horizontal");

ngle=20*s("Horizontal");

}

voidShiftGears()

{

intAppropriateGear=CurrentGear;

if(EngineRPM>=MaxEngineRPM)

{

AppropriateGear=CurrentGear;

for(inti=0;i<;i++)

{

if(*GearRatio

{

AppropriateGear=i;

break;

}

}

CurrentGear=AppropriateGear;

}

if(EngineRPM<=MaxEngineRPM)

{

AppropriateGear=CurrentGear;

for(intj=-1;j>=0;j--)

{

if(*GearRatio[j]>MinEngineRPM)

{

AppropriateGear=j;

break;

}

}

CurrentGear=AppropriateGear;

}

}

本文发布于:2022-11-27 00:16:38,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/27526.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:调控情绪
下一篇:新手学开车
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图