コード例 #1
0
        /// <summary>
        /// Same as previus funtion but with easing in/out equations.
        /// </summary>
        public void DoTransition(CameraTransitionEffects transition, Camera from, Camera to, float time, EaseType easeType, EaseMode easeMode, params object[] parameters)
        {
            this.easeType = easeType;
            this.easeMode = easeMode;

            DoTransition(transition, from, to, time, parameters);
        }
コード例 #2
0
        private void UpdateEffect(CameraTransitionEffects newEffect)
        {
            transition = newEffect;

            if (currentEffect != null)
            {
                Destroy(currentEffect);
            }

            switch (transition)
            {
            case CameraTransitionEffects.Cube:              currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionCube>(); break;

            case CameraTransitionEffects.Doom:              currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionDoom>(); break;

            case CameraTransitionEffects.FadeToColor:       currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionFadeToColor>(); break;

            case CameraTransitionEffects.FadeToGrayscale:   currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionFadeToGrayscale>(); break;

            case CameraTransitionEffects.Flash:             currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionFlash>(); break;

            case CameraTransitionEffects.Flip:              currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionFlip>(); break;

            case CameraTransitionEffects.Fold:              currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionFold>(); break;

            case CameraTransitionEffects.Gate:              currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionGate>(); break;

            case CameraTransitionEffects.Glitch:            currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionGlitch>(); break;

            case CameraTransitionEffects.LinearBlur:        currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionLinearBlur>(); break;

            case CameraTransitionEffects.Mosaic:            currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionMosaic>(); break;

            case CameraTransitionEffects.PageCurl:          currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionPageCurl>(); break;

            case CameraTransitionEffects.PageCurlAdvanced:  currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionPageCurlAdvanced>(); break;

            case CameraTransitionEffects.Pixelate:          currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionPixelate>(); break;

            case CameraTransitionEffects.Radial:            currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionRadial>(); break;

            case CameraTransitionEffects.RandomGrid:        currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionRandomGrid>(); break;

            case CameraTransitionEffects.SmoothCircle:      currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionSmoothCircle>(); break;

            case CameraTransitionEffects.SmoothLine:        currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionSmoothLine>(); break;

            case CameraTransitionEffects.Swap:              currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionSwap>(); break;

            case CameraTransitionEffects.Valentine:         currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionValentine>(); break;

            case CameraTransitionEffects.WarpWave:          currentEffect = fromCamera.gameObject.AddComponent <CameraTransitionWarpWave>(); break;
            }

            if (currentEffect == null)
            {
                Debug.LogWarningFormat("No camera effect found in '{0}'", fromCamera.name);
            }
        }
コード例 #3
0
    public void SetTransitionMode(CameraTransitionEffects emode)
    {
        if (_CurTransitionMode == emode)
        {
            return;
        }

        if (emode >= CameraTransitionEffects.None && emode < CameraTransitionEffects.Max)
        {
            _CurTransitionMode         = emode;
            assistant.transitionEffect = _CurTransitionMode;
        }
    }
コード例 #4
0
        /// <summary>
        /// Create a transition effect between cameras.
        ///
        /// At the end of the transition, the source camera (from) will be deactivated
        /// and the camera target (to) will be activated.
        ///
        /// No AudioListener is modified.
        /// </summary>
        /// <param name="transition">The transition effect.</param>
        /// <param name="from">Source camera.</param>
        /// <param name="to">Target camera.</param>
        /// <param name="time">Duration in seconds (>0).</param>
        /// <param name="parameters">Parameters to configure the effects (optional).</param>
        /// <remarks>
        /// Transitions parameters:
        /// <list type="bullet">
        /// <item>Cube: perspective (float), zoom (float), reflection (float), elevation (float).</item>
        /// <item>Doom: bar width (int), amplitude (float), noise (float), frequency (float).</item>
        /// <item>FadeToColor: strength (float), color (Color).</item>
        /// <item>FadeToGrayscale: strength (float).</item>
        /// <item>Flash: strength (float), intensity (float), zoom (float), velocity (float), color (Color).</item>
        /// <item>Fold: mode (CameraTransitionFold.Modes).</item>
        /// <item>Flip: mode (CameraTransitionFlip.Modes).</item>
        /// <item>Gate: perspective (float), depth (float), reflection (float).</item>
        /// <item>Glitch: strength (float).</item>
        /// <item>LinearBlur: intensity (float), passes (int).</item>
        /// <item>Mosaic: steps (Vector2), rotate (bool).</item>
        /// <item>PageCurl: angle (float), radius (float), shadows (bool).</item>
        /// <item>PageCurlAdvanced: angle (float), radius (float).</item>
        /// <item>Pixelate: size (float).</item>
        /// <item>Radial: clockwise (bool).</item>
        /// <item>RandomGrid: rows (int), columns (int), smoothness (float).</item>
        /// <item>SmoothCircle: invert (bool), smoothness (float).</item>
        /// <item>SmoothLine: angle (float), smoothness (float).</item>
        /// <item>Swap: perspective (float), depth (float), reflection (float).</item>
        /// <item>Valentine: border (float), color (Color).</item>
        /// <item>WarpWave: mode (CameraTransitionWarpWave.Modes), curvature (float).</item>
        /// </list>
        /// <example>
        /// cameraTransition.DoTransition(CameraTransitionEffects.FadeToColor, cameraA, cameraB, 1.0f, new object[] { 0.3f, Color.black });
        /// </example>
        /// </remarks>
        public void DoTransition(CameraTransitionEffects transition, Camera from, Camera to, float time, params object[] parameters)
        {
            if (from != null && to != null)
            {
                if (from != to)
                {
                    if (time > 0.0f)
                    {
                        isRunning = true;

                        Progress       = 0.0f;
                        Transition     = transition;
                        FromCamera     = from;
                        ToCamera       = to;
                        transitionTime = time;
                        transitionLife = 0.0f;

                        from.gameObject.SetActive(false);
                        to.gameObject.SetActive(true);
                        from.gameObject.SetActive(true);

                        currentEffect.InvertRenderTexture = invertRenderTexture;

#if ENABLE_LOGS
                        Debug.LogFormat("Camera transition '{0}' from '{1}' to '{2}' using '{3}' in {4} seconds.", transition.ToString(), from.gameObject.name, to.gameObject.name, easeType.ToString(), time);
#endif
                        if (parameters != null && parameters.Length > 0)
                        {
                            SetParametersToCurrentEffect(parameters);
                        }

                        StartCoroutine(TransitionCoroutine());
                    }
                    else
                    {
                        Debug.LogWarning(@"Duration must be greater than zero.");
                    }
                }
                else
                {
                    Debug.LogWarning(@"Cameras must be differents.");
                }
            }
            else
            {
                Debug.LogWarning(@"Invalid cameras.");
            }
        }
コード例 #5
0
        /// <summary>
        /// Checks if a transition effect is supported by the current hardware.
        /// </summary>
        /// <param name="transition">Transition effect</param>
        /// <returns>Is supported?</returns>
        public bool CheckTransition(CameraTransitionEffects transition)
        {
            bool isSupported = true;

            string transitionName = transition.ToString();
            string shaderPath     = string.Format("Shaders/Transition{0}", transitionName);

            Shader shader = Resources.Load <Shader>(shaderPath);

            if (shader != null)
            {
                if (shader.isSupported == true)
                {
                    Material material = new Material(shader);
                    if (material == null)
                    {
                        Debug.LogErrorFormat("'{0}' not supported, material null.", transitionName);

                        isSupported = false;
                    }
                    else
                    {
                        DestroyImmediate(material);
                    }
#if ENABLE_LOGS
                    Debug.LogFormat("'{0}' supported.", transitionName);
#endif
                }
                else
                {
                    Debug.LogErrorFormat("'{0}' not supported, shader not supported.", transitionName);

                    isSupported = false;
                }
            }
            else
            {
                Debug.LogErrorFormat("'{0}' not supported, shader null or not found. Please contact to '*****@*****.**'.", transitionName);

                isSupported = false;
            }

            return(isSupported);
        }
コード例 #6
0
    private void OnEnable()
    {
        if (cameraTransition == null)
        {
            cameraTransition = GameObject.FindObjectOfType <CameraTransition>();
            if (cameraTransition == null)
            {
                Debug.LogError(@"No CameraTransition found.");
            }
        }

        if (assistant == null)
        {
            assistant = GameObject.FindObjectOfType <CameraTransitionsAssistant>();
            if (cameraTransition == null)
            {
                Debug.LogError(@"No CameraTransitionsAssistant found.");
            }
        }

        _CurTransitionMode         = CameraTransitionEffects.None;
        assistant.transitionEffect = _CurTransitionMode;
    }
コード例 #7
0
        private void OnEnable()
        {
            cameras.AddRange(GameObject.FindObjectsOfType <Camera>());
            if (cameras.Count > 1)
            {
                cameraTransition = GameObject.FindObjectOfType <CameraTransition>();
                if (cameraTransition != null)
                {
                    cameraTransition.Time = transitionTime;

                    // Randomly select a camera.
                    cameras.Sort(delegate(Camera a, Camera b) { return(string.Compare(a.gameObject.name, b.gameObject.name)); });

                    cameraIdx = random.Next(0, cameras.Count - 1);

                    for (int i = 0; i < (cameras.Count - 0); ++i)
                    {
                        cameras[i].gameObject.SetActive(i == cameraIdx);
                    }

                    // Test all effects.
                    Array untestedTransitions = Enum.GetValues(typeof(CameraTransitionEffects));
                    for (int i = 0; i < untestedTransitions.Length; ++i)
                    {
                        CameraTransitionEffects testedEffect = (CameraTransitionEffects)untestedTransitions.GetValue(i);

                        if (cameraTransition.CheckTransition(testedEffect) == true
#if UNITY_WEBGL
                            // Not supported in WebGL yet.
                            && testedEffect != CameraTransitionEffects.LinearBlur && testedEffect != CameraTransitionEffects.CrossZoom
#endif
                            )
                        {
                            transitionEnum.Add(testedEffect);
                        }
                        else
                        {
                            Debug.LogWarningFormat("Transition '{0}' is not supported.", testedEffect.ToString());
                        }
                    }

                    for (int i = 0; i < transitionEnum.Count; ++i)
                    {
                        transitionToggles.Add(false);
                    }
                }
                else
                {
                    Debug.LogWarning(@"CameraTransition not found.");
                }
            }
            else
            {
                Debug.LogWarning(@"Few cameras found (at least two).");
            }

            this.enabled = (cameras.Count > 1 && cameraTransition != null);

#if ENABLE_DEMO
            guiShow               = false;
            changeCameraTime      = 0.5f;
            randomTransition      = false;
            cameraTransition.Time = 2.0f;
#endif
        }
コード例 #8
0
        /// <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;
        }