/// <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); }
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); } }
public void SetTransitionMode(CameraTransitionEffects emode) { if (_CurTransitionMode == emode) { return; } if (emode >= CameraTransitionEffects.None && emode < CameraTransitionEffects.Max) { _CurTransitionMode = emode; assistant.transitionEffect = _CurTransitionMode; } }
/// <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."); } }
/// <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); }
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; }
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 }
/// <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; }