The logic is , if the Car finds any obstacle using Raycast a function will rotate the angle of a wheel so that car goes left or right. But it seem the car stuck in a certain place where Raycast finds a obstacle , the function WillColllide() returns true,false,true,false sequentially
var willColliedVar:boolean;
function WillColllide():boolean{
var hit:RaycastHit;
if(Physics.Raycast(distenceDitactorFl.transform.position,distenceDitactorFl.transform.forward,hit) && hit.collider.tag =="wall") {
var hitDistence = Mathf.RoundToInt(hit.distance);
if(hitDistence >=4 && hitDistence<=5){
return true;
}
}
if (Physics.Raycast(distenceDitactorFr.transform.position,distenceDitactorFr.transform.forward,hit, 5) && hit.collider.tag =="wall") {
var hitDistence2 = Mathf.RoundToInt(hit.distance);
if(hitDistence2 >=4 && hitDistence2<=5){
return true;
}
}
return false;
}
function MoveForward():void{
wheelRr.motorTorque = maxTorque * 0.25;
wheelRl.motorTorque = maxTorque *0.25;
}
function TurnStraight():void{
wheelFl.steerAngle = 0;
wheelFr.steerAngle = 0;
}
function TurnLeft(steerAngle:int):void{
wheelFl.steerAngle = -steerAngle;
wheelFr.steerAngle = -steerAngle;
}
function Update () {
MoveForward();
if(willColliedVar){
TurnRight(steerRotationLow);
}else{
TurnStraight();
}
}
function LateUpdate () {
}
function FixedUpdate(){
willColliedVar = WillColllide();
}
Do not use '5' when trying to pass reference to layer '5', you are actually passing reference to multiple layers (3 and 1), instead you have to put
int layerMask = 1<<5;
then pass inlayerMask
instead of 5. Useint layerMask = 1<<5;
thenlayerMask = ~layerMask;
for everything except layer 5.