Example #1
0
    void FixedUpdate()
    {
        CheckNodeDistance();

        if (_avoiding || _stucked)
        {
            _avoiding = false;
            return;
        }

        _steerWheel.SetSteerAxis(Mathf.Lerp(_steerWheel.SteerAxis, SteerAxis, Time.deltaTime * SteerSpeed));
    }
Example #2
0
    private void AvoidObstacle(CarSensor.Sensor[] sensors, RaycastHit hit)
    {
        if (_stucked)
        {
            return;
        }
        var frontalObstacule = new CarSensor.Sensor[] { CarSensor.Sensor.Front, CarSensor.Sensor.FrontR, CarSensor.Sensor.FrontL };

        BroadcastMessage("SetAvoiding", true, SendMessageOptions.DontRequireReceiver);
        var steerAxis = 0f;

        if (sensors.Contains(CarSensor.Sensor.FrontL))
        {
            steerAxis += 1f;
        }
        else if (sensors.Contains(CarSensor.Sensor.Left))
        {
            steerAxis += 0.5f;
        }

        if (sensors.Contains(CarSensor.Sensor.FrontR))
        {
            steerAxis -= 1f;
        }
        else if (sensors.Contains(CarSensor.Sensor.Right))
        {
            steerAxis -= 0.5f;
        }

        if (steerAxis == 0 && frontalObstacule.All(x => sensors.Contains(x)))
        {
            steerAxis += hit.normal.x < 0 ? -1f : 1f;
        }

        _steerWheel.SetSteerAxis(steerAxis);
    }