当前位置:首页 > 自动驾驶 > 自动驾驶系统 语言,求一段unity3D汽车自动驾驶的脚本代码 > 正文

自动驾驶系统 语言,求一段unity3D汽车自动驾驶的脚本代码

导读:1,请求一段unity3D汽车自动驾驶仪脚本代码 1.将脚本直接连接到车身网格。身体必须有一个刚体组件。子对象必须有四个轮网格。如果你想要声音,你需要有一个AudioSource组件

1,请求一段unity3D汽车自动驾驶仪脚本代码

求一段unity3D汽车自动驾驶的脚本代码

1.将脚本直接连接到车身网格。身体必须有一个刚体组件。子对象必须有四个轮网格。如果你想要声音,你需要有一个AudioSource组件。

2.打开Inspector,选择汽车脚本,然后将四个轮子连接到相应的Transform参数。将wheelRadius参数设置为车轮网格的大小。 WheelCollider是自动生成的,因此无需手动添加。这将确保操作正在运行,并且可以添加其他声音和灰尘。

脚本源代码如下:*/

#pragma strict

//最大转角和制动加速能力

Var maxCornerAccel=10.0;

Var maxBrakeAccel=10.0;

//重心高度 - 角落倾斜

Var cogY=0.0;

//引擎功率带

Var minRPM=700;

Var maxRPM=6000;

//最大发动机扭矩

Var maxTorque=400;

//自动变速器换档点

Var shiftDownRPM=2500;

Var shiftUpRPM=5500;

//传动比

Var gearRatios=[-2.66,2.66,1.78,1.30,1.00];

Var finalDriveRatio=3.4;

//基本处理修饰符:

//1.0转向不足

//0.0转向过度

Var handlingTendency=0.7;

//图形轮对象

Var wheelFR:转换;

Var wheelFL:转换;

Var wheelBR:转换;

Var wheelBL:转换;

//暂停设置

Var suspensionDistance=0.3;

Var泉=1000;

Var阻尼器=200;

Var wheelRadius=0.45;

//地面尘埃的粒子效应

Var groundDustEffect:转换;

私有var queryUserInput=true;

私有var engineRPM:浮动;

Private var steerVelo=0.0;

私人变量制动=0.0;

私人var handbrake=0.0;

Private var steer=0.0;

私人变电机=0.0;

//private var skidTime=0.0;

Private var onGround=false;

Private var cornerSlip=0.0;

私有var driveSlip=0.0;

私有var wheelRPM:浮动;

私人变速器=1;

//private var skidmarks: Skidmarks;

私人变速轮: WheelData [];

私有var wheelY=0.0;

私有var rev=0.0;

//外部脚本使用的函数

//如果需要,控制汽车

//============================================================================

//返回车辆的状态字符串

函数GetStatus(gui: GUIText){

Gui.text='v='+(rigidbody.velocity.magnitude * 3.6).ToString('f1')km/h'ngear='+ gear +''nrpm='+ engineRPM.ToString('f0');

//返回车辆的信息字符串

函数GetControlString(gui: GUIText){

Gui.text='使用箭头键控制吉普车,'nspace for handbrake。'; }

//启用或禁用用户控件

函数SetEnableUserInput(enableInput)

queryUserInput=enableInput;

//汽车物理

//============================================================================

//一些计算数据

类WheelData {+'

Var rotation=0.0;

Var coll: WheelCollider;

Var图形:变换;

Var maxSteerAngle=0.0;

Var lastSkidMark=-1;

Var powered=false;

Var handbraked=false;

Var originalRotation: Quaternion;

};

功能开始(){

//设置轮子

Wheels=new WheelData [4];

对于(I=0; I 1)

handbrakeSlip=1;

totalSlip=0.0;

onGround=FALSE;

对于(车轮中的w)

//旋转轮

W.rotation +=wheelRPM/60.0 * -rev * 360.0 * Time.fixedDeltaTime; w.rotation=Mathf.Repeat(w.rotation,360.0);

w.graphic.localRotation=Quaternion.Euler(w.rotation,w.maxSteerAngle * steer,0.0)* w.originalRotation;

//检查轮子是否在地上

如果(w.coll.isGrounded)

onGround=TRUE;

Slip=cornerSlip +(w.powered?driveSlip: 0.0)+(w.handbraked?handbrakeSlip: 0.0); totalSlip +=slip;

Var命中: WheelHit;

Var c: WheelCollider;

c=w.coll;

如果(c.GetGroundHit(命中))

//如果车轮接触地面,调整图形车轮位置以反映弹簧

w.graphic.localPosition.y-=Vector3.Dot(w.graphic.position-hit.point,transform.up)-w.coll.radius;

//如果适当的话,在地面上制造灰尘

如果(滑差> 0.5 && hit.collider.tag=='Dusty')

groundDustEffect.position=hit.point;

groundDustEffect.particleEmitter.worldVelocity=rigidbody.velocity * 0.5; groundDustEffect.particleEmitter.minEmission=(SLIP-0.5)* 3; groundDustEffect.particleEmitter.maxEmission=(SLIP-0.5)* 3;

groundDustEffect.particleEmitter.Emit(); }

//和防滑标记

/* IF(滑移> 0.75 && skidmarks!=null)

w.lastSkidMark=skidmarks.AddSkidMark(hit.point,hit.normal,(滑移0.75)* 2,w.lastSkidMark);

其他

w.lastSkidMark=-1; */

//其他w.lastSkidMark=-1;

totalSlip/=wheels.length;

//自动换档

函数AutomaticTransmission()

如果(齿轮> 0)

如果(engineRPM>shiftUpRPM && gear0;马达=0.0 ;; //ifcarisairborne,justre;若(onGround!); engineRPM +=(马达-0.3)* 2; engineRPM=Mathf.Clamp(烯; return0.0 ;;别的; AutomaticTransmission();; engineRPM=whee

如果(制动+手刹> 0.1)

马达=0.0;

//如果汽车是空中的,只需转发引擎

如果(!onGround)

engineRPM +=(motor-0.3)* 25000.0 * Time.deltaTime;

engineRPM=Mathf.Clamp(engineRPM,minRPM,maxRPM);

返回0.0;

其他

AutomaticTransmission();

engineRPM=wheelRPM * gearRatios [齿轮] * finalDriveRatio;

如果(engineRPMdiff)cornerAccel=DIFF;

cornerForce= - (flatVelo-flatDir).normalized * cornerAccel * rigidbody.mass;

cornerSlip=Mathf.Pow(cornerAccel/maxCornerAccel,3);

rigidbody.AddForceAtPosition(制动力+ engineForce + cornerForce,transform.position + transform.up * wheelY);

handbrakeFactor=1 +手刹* 4;

如果(REV

最新动态