void Awake()
    {
        drivetrainScript = target.GetComponent <Drivetrain>();
        raycastLayers    = ~ignoreLayers;

        //If curveFOV hasn't assigned in inspector
        //if (curveFOV == null || curveFOV.length == 0)
        {
            curveFOV = new AnimationCurve();
            curveFOV.AddKey(0.0f, 55.0f);
            curveFOV.AddKey(1.0f, 72.0f);
        }

        //if (FOVAffectCamDistance == null || FOVAffectCamDistance.length == 0)
        {
            FOVAffectCamDistance = new AnimationCurve();
            FOVAffectCamDistance.AddKey(0.0f, 0.0f);
            FOVAffectCamDistance.AddKey(1.0f, -2.0f);
        }

        //if (PitchCurve == null || PitchCurve.length == 0)
        {
            PitchCurve = new AnimationCurve();
            PitchCurve.AddKey(0.0f, 0.0f);
            PitchCurve.AddKey(0.1f, 8.0f);
            PitchCurve.AddKey(1.0f, 1.0f);
            Keyframe key = new Keyframe(0.1f, 8.0f);
            key.tangentMode = 21;
            key.inTangent   = 0;
            key.outTangent  = 0;
            PitchCurve.MoveKey(1, key);
        }

        mainCamera = CreateCamera();

        accelKeyGetter = () => Input.GetKey(KeyCode.UpArrow);
        brakeKeyGetter = () => Input.GetKey(KeyCode.DownArrow);

        if (fMinTargetAngle_y < 0.0f)
        {
            fMinTargetAngle_y += 360f;
        }

        //Find MainCamera
        if (!multiCameraTest)
        {
            foreach (GameObject obj in GameObject.FindGameObjectsWithTag("MainCamera"))
            {
                if (obj.activeInHierarchy == true && obj.GetComponent <Camera>())
                {
                    SceneMainCamera = obj;
                }
            }
        }
        else
        {
            /*
             * SceneMainCamera = new GameObject("MultiCameraTest_" + name);
             * SceneMainCamera.AddComponent<Camera>();
             * if (CameraManager.MultiTestCameraInstances == null)
             *  CameraManager.MultiTestCameraInstances = new List<CarCamera>();
             * CameraManager.MultiTestCameraInstances.Add(this);
             */
        }
        MethodInfo minfo = typeof(CarCamera).GetMethod("switchCounterUpdate_" + switchCriteria.ToString("F"), BindingFlags.NonPublic | BindingFlags.Instance);

        switchCounterUpdater = (SwitchCounterUpdater)Delegate.CreateDelegate(typeof(SwitchCounterUpdater), this, minfo, false);
    }