/// <summary>
        /// Switch camera with transition effect.
        /// </summary>
        private void SwitchCamera(int idx)
        {
            CameraTransitionEffects transition = cameraTransition.Transition;

            // Add some random parameters (optional).
            List <object> parameters = new List <object>();

#if ENABLE_DEMO
            if ((int)transition < transitionEnum.Count - 1)
            {
                transition++;
            }
            else
            {
                transition = 0;
            }

            transition = CameraTransitionEffects.Cube;
#else
            if (randomTransition == true)
            {
                do
                {
                    transition = transitionEnum[random.Next(transitionEnum.Count)];
                } while (transition == cameraTransition.Transition);
            }
            else
            {
                if (transitionSelected == -1)
                {
                    transitionSelected = 0;
                }

                transition = transitionEnum[transitionSelected];

/*
 *      if ((int)transitionSelected < transitionEnum.Count - 1)
 *        transitionSelected++;
 *      else
 *        transitionSelected = 0;*/
            }

            switch (transition)
            {
            case CameraTransitionEffects.CrossZoom:
                parameters.Add(UnityEngine.Random.Range(0.3f, 0.6f));                   // Strength.
                parameters.Add(20.0f);                                                  // Quality.
                break;

            case CameraTransitionEffects.Cube:
                parameters.Add(UnityEngine.Random.Range(0.5f, 0.9f));                   // Perspective.
                parameters.Add(UnityEngine.Random.Range(0.0f, 0.8f));                   // Zoom.
                parameters.Add(UnityEngine.Random.Range(0.2f, 0.6f));                   // Reflection.
                parameters.Add(UnityEngine.Random.Range(0.0f, 4.0f));                   // Elevantion.
                break;

            case CameraTransitionEffects.Doom:
                parameters.Add(UnityEngine.Random.Range(5, 10));                        // Bar width.
                parameters.Add(UnityEngine.Random.Range(1.0f, 5.0f));                   // Amplitude.
                parameters.Add(UnityEngine.Random.Range(0.0f, 0.25f));                  // Noise.
                parameters.Add(UnityEngine.Random.Range(0.5f, 3.0f));                   // Frequency.
                break;

            case CameraTransitionEffects.FadeToColor:
                parameters.Add(UnityEngine.Random.Range(0.2f, 0.4f));                   // Strength.
                parameters.Add(NiceColor());                                            // Color.
                break;

            case CameraTransitionEffects.FadeToGrayscale:
                parameters.Add(UnityEngine.Random.Range(0.2f, 0.6f));                   // Strength.
                break;

            case CameraTransitionEffects.Flash:
                parameters.Add(UnityEngine.Random.Range(0.2f, 0.4f));                   // Strength.
                parameters.Add(UnityEngine.Random.Range(2.0f, 4.0f));                   // Intensity.
                parameters.Add(UnityEngine.Random.Range(0.4f, 0.6f));                   // Zoom.
                parameters.Add(UnityEngine.Random.Range(2.0f, 4.0f));                   // Velocity.
                parameters.Add(NiceColor());                                            // Color.
                break;

            case CameraTransitionEffects.Flip:
                parameters.Add(UnityEngine.Random.value > 0.5f ? CameraTransitionFlip.Modes.Horizontal : CameraTransitionFlip.Modes.Vertical); // Mode.
                break;

            case CameraTransitionEffects.Fold:
                parameters.Add(UnityEngine.Random.value > 0.5f ? CameraTransitionFold.Modes.Horizontal : CameraTransitionFold.Modes.Vertical); // Mode.
                break;

            case CameraTransitionEffects.Glitch:
                parameters.Add(UnityEngine.Random.Range(0.3f, 0.6f));                   // Strength.
                break;

            case CameraTransitionEffects.LinearBlur:
                parameters.Add(UnityEngine.Random.Range(0.1f, 0.25f));                  // Intensity.
                parameters.Add(UnityEngine.Random.Range(6, 8));                         // Passes.
                break;

            case CameraTransitionEffects.Mosaic:
                Vector2 jumpTo = Vector2.zero;
                while (jumpTo == Vector2.zero)
                {
                    jumpTo = new Vector2(Mathf.Floor(UnityEngine.Random.Range(-2.0f, 2.0f)),
                                         Mathf.Floor(UnityEngine.Random.Range(-2.0f, 2.0f)));
                }

                parameters.Add(jumpTo);                                                 // Steps.
                parameters.Add(UnityEngine.Random.value > 0.5f);                        // Rotation.
                break;

            case CameraTransitionEffects.PageCurl:
                parameters.Add(UnityEngine.Random.Range(0.0f, 90.0f));                  // Angle.
                parameters.Add(UnityEngine.Random.Range(0.1f, 0.5f));                   // Radius.
                parameters.Add(true);                                                   // Shadows.
                break;

            case CameraTransitionEffects.Pixelate:
                parameters.Add(UnityEngine.Random.Range(5.0f, 100.0f));                 // Pixelate size.
                break;

            case CameraTransitionEffects.Radial:
                parameters.Add(UnityEngine.Random.value > 0.5f);                        // Clockwise?
                break;

            case CameraTransitionEffects.RandomGrid:
                parameters.Add(UnityEngine.Random.Range(5, 10));                        // Rows.
                parameters.Add(UnityEngine.Random.Range(5, 10));                        // Columns.
                parameters.Add(UnityEngine.Random.Range(0.25f, 0.75f));                 // Smoothness.
                break;

            case CameraTransitionEffects.SmoothCircle:
                parameters.Add(UnityEngine.Random.value > 0.5f);                        // Invert?
                parameters.Add(UnityEngine.Random.Range(0.1f, 0.4f));                   // Smoothness.
                parameters.Add(Vector2.one * UnityEngine.Random.Range(0.4f, 0.6f));     // Center.
                break;

            case CameraTransitionEffects.SmoothLine:
                parameters.Add(UnityEngine.Random.Range(0.0f, 359.9f));                 // Angle.
                parameters.Add(UnityEngine.Random.Range(0.1f, 0.4f));                   // Smoothness.
                break;

            case CameraTransitionEffects.Valentine:
                parameters.Add(UnityEngine.Random.Range(10.0f, 50.0f));                 // Border.
                parameters.Add(NiceColor());                                            // Color.
                break;

            case CameraTransitionEffects.WarpWave:
                parameters.Add(UnityEngine.Random.value > 0.5f ? CameraTransitionWarpWave.Modes.Horizontal : CameraTransitionWarpWave.Modes.Vertical); // Mode.
                parameters.Add(UnityEngine.Random.Range(0.1f, 2.0f));                                                                                  // Curvature.
                break;
            }
#endif

            cameraTransition.DoTransition(transition, cameras[cameraIdx], cameras[idx], cameraTransition.Time, parameters.ToArray());

            cameraIdx = idx;
        }
        /// <summary>
        /// Execute transition.
        /// </summary>
        public void ExecuteTransition()
        {
            if (cameraTransition != null)
            {
                timeToExecute = -1.0f;

                object[] parameters = null;
                switch (transitionEffect)
                {
                case CameraTransitionEffects.CrossZoom:         parameters = crossZoomParams.ToParams(); break;

                case CameraTransitionEffects.Cube:              parameters = cubeParams.ToParams(); break;

                case CameraTransitionEffects.Doom:              parameters = doomParams.ToParams(); break;

                case CameraTransitionEffects.FadeToColor:       parameters = fadeToColorParams.ToParams(); break;

                case CameraTransitionEffects.FadeToGrayscale:   parameters = fadeToGrayscaleParams.ToParams(); break;

                case CameraTransitionEffects.Flash:             parameters = flashParams.ToParams(); break;

                case CameraTransitionEffects.Flip:              parameters = flipParams.ToParams(); break;

                case CameraTransitionEffects.Fold:              parameters = foldParams.ToParams(); break;

                case CameraTransitionEffects.Gate:              parameters = gateParams.ToParams(); break;

                case CameraTransitionEffects.Glitch:            parameters = glitchParams.ToParams(); break;

                case CameraTransitionEffects.LinearBlur:        parameters = linearBlurParams.ToParams(); break;

                case CameraTransitionEffects.Mosaic:            parameters = mosaicParams.ToParams(); break;

                case CameraTransitionEffects.PageCurl:          parameters = pageCurlParams.ToParams(); break;

                case CameraTransitionEffects.PageCurlAdvanced:  parameters = pageCurlAdvancedParams.ToParams(); break;

                case CameraTransitionEffects.Pixelate:          parameters = pixelateParams.ToParams(); break;

                case CameraTransitionEffects.Radial:            parameters = radialParams.ToParams(); break;

                case CameraTransitionEffects.RandomGrid:        parameters = randomGridParams.ToParams(); break;

                case CameraTransitionEffects.SmoothCircle:      parameters = smoothCircleParams.ToParams(); break;

                case CameraTransitionEffects.SmoothLine:        parameters = smoothLineParams.ToParams(); break;

                case CameraTransitionEffects.Swap:              parameters = swapParams.ToParams(); break;

                case CameraTransitionEffects.Valentine:         parameters = valentineParams.ToParams(); break;

                case CameraTransitionEffects.WarpWave:          parameters = warpWaveParams.ToParams(); break;
                }

                cameraTransition.DoTransition(transitionEffect, cameraA, cameraB, transitionTime, easeType, easeMode, parameters);
            }
            else
            {
                Debug.LogWarning(@"CameraTransition component not found.");
            }
        }