Exemplo n.º 1
0
    void FixedUpdate()
    {
        if (CarController == null || !CanMove)
        {
            return;
        }

        float dist = (Data.GetKey(TargetKeyIndex) - CarController.transform.position).magnitude;

        if (dist < 1.0f)
        {
            TargetKeyIndex = (TargetKeyIndex + 1) % Data.Keys.Count;
        }

        float   motor         = 0;
        float   steering      = 0;
        Vector3 targetVector  = Data.GetKey(TargetKeyIndex) - CarController.transform.position;
        Vector3 forwardVector = CarController.transform.forward;
        float   targetAngle   = (float)StaticGameHelper.AngleBetweenVectors(targetVector, forwardVector);
        float   maxAngle      = CarController.GetMaxSteeringAngle();

        if (targetAngle < maxAngle && targetAngle > -maxAngle)
        {
            motor    = 1;
            steering = targetAngle / maxAngle;
        }
        else
        {
            if (targetAngle > maxAngle)
            {
                motor    = 1 - (targetAngle - maxAngle) / (180 - maxAngle) * 0.5f;
                steering = 1;
            }
            else if (targetAngle < -maxAngle)
            {
                steering = -1;
                motor    = 1 - (targetAngle + maxAngle) / (-180 + maxAngle) * 0.5f;
            }
        }
        CarController.UpdateInput(motor * Data.MotorMultiplier, steering * Data.WheelMultiplier);
    }