/// <summary> /// Create a blend from one ICinemachineCamera to another, /// or to/from a point, if we can't do anything else /// </summary> private CinemachineBlend CreateBlend( ICinemachineCamera camA, ICinemachineCamera camB, AnimationCurve blendCurve, float duration, CinemachineBlend activeBlend) { //UnityEngine.Profiling.Profiler.BeginSample("CinemachineTrackedDolly.MutateCameraState"); if (blendCurve == null || duration <= 0 || (camA == null && camB == null)) { //UnityEngine.Profiling.Profiler.EndSample(); return(null); } if (camA == null || activeBlend != null) { // Blend from the current camera position CameraState state = CameraState.Default; if (activeBlend != null) { state = activeBlend.State; } else { state.RawPosition = transform.position; state.RawOrientation = transform.rotation; state.Lens = LensSettings.FromCamera(OutputCamera); } camA = new StaticPointVirtualCamera(state, activeBlend == null ? "(none)" : "Mid-blend"); } CinemachineBlend blend = new CinemachineBlend(camA, camB, blendCurve, duration, 0); //UnityEngine.Profiling.Profiler.EndSample(); return(blend); }
/// <summary>Create a blend between 2 virtual cameras, taking into account /// any existing active blend, with special case handling if the new blend is /// effectively an undo of the current blend</summary> /// <param name="camA">Outgoing virtual camera</param> /// <param name="camB">Incoming virtual camera</param> /// <param name="blendDef">Definition of the blend to create</param> /// <param name="activeBlend">The current active blend</param> /// <returns>The new blend</returns> protected CinemachineBlend CreateBlend( ICinemachineCamera camA, ICinemachineCamera camB, CinemachineBlendDefinition blendDef, CinemachineBlend activeBlend) { if (blendDef.BlendCurve == null || blendDef.BlendTime <= 0 || (camA == null && camB == null)) { return(null); } if (activeBlend != null) { // Special case: if backing out of a blend-in-progress // with the same blend in reverse, adjust the belnd time if (activeBlend.CamA == camB && activeBlend.CamB == camA && activeBlend.Duration <= blendDef.BlendTime) { blendDef.m_Time = activeBlend.TimeInBlend; } camA = new BlendSourceVirtualCamera(activeBlend); } else if (camA == null) { camA = new StaticPointVirtualCamera(State, "(none)"); } return(new CinemachineBlend( camA, camB, blendDef.BlendCurve, blendDef.BlendTime, 0)); }
/// <summary> /// Create a blend from one <see cref="ICinemachineCamera"/> to another, /// or to/from a point, if we can't do anything else /// </summary> private CinemachineBlend CreateBlend( ICinemachineCamera camA, ICinemachineCamera camB, AnimationCurve blendCurve, CinemachineBlend activeBlend) { if (blendCurve == null || blendCurve.keys.Length <= 1 || (camA == null && camB == null)) { return(null); } if (camA == null || activeBlend != null) { // Blend from the current camera position string name = "(none)"; CameraState state = CameraState.Default; if (activeBlend != null) { state = activeBlend.State; name = "Mid-blend"; } else if (OutputCamera != null) { state.Lens = new LensSettings(OutputCamera); state.RawPosition = OutputCamera.transform.position; state.RawOrientation = OutputCamera.transform.rotation; } camA = new StaticPointVirtualCamera(state, name); } return(new CinemachineBlend(camA, camB, blendCurve, 0)); }
/// <summary>Create a blend between 2 virtual cameras, taking into account /// any existing active blend.</summary> protected CinemachineBlend CreateBlend( ICinemachineCamera camA, ICinemachineCamera camB, CinemachineBlendDefinition blendDef, CinemachineBlend activeBlend) { if (blendDef.BlendCurve == null || blendDef.m_Time <= 0 || (camA == null && camB == null)) { return(null); } if (activeBlend != null) { if (activeBlend.Uses(camB)) { camA = new StaticPointVirtualCamera(activeBlend.State, "Mid-Blend"); } else { camA = new BlendSourceVirtualCamera(activeBlend); } } else if (camA == null) { camA = new StaticPointVirtualCamera(State, "(none)"); } return(new CinemachineBlend(camA, camB, blendDef.BlendCurve, blendDef.m_Time, 0)); }
private CinemachineBlend CreateBlend(ICinemachineCamera camA, ICinemachineCamera camB, AnimationCurve blendCurve, float duration, CinemachineBlend activeBlend, float deltaTime) { if (blendCurve == null || duration <= 0f || (camA == null && camB == null)) { return(null); } if (camA == null || activeBlend != null) { camA = new StaticPointVirtualCamera((activeBlend != null) ? activeBlend.State : this.State, (activeBlend != null) ? "Mid-blend" : "(none)"); } return(new CinemachineBlend(camA, camB, blendCurve, duration, 0f)); }
private CinemachineBlend CreateBlend( ICinemachineCamera camA, ICinemachineCamera camB, AnimationCurve blendCurve, CinemachineBlend activeBlend, float deltaTime) { if (blendCurve == null || blendCurve.keys.Length <= 1 || (camA == null && camB == null)) { return(null); } if (camA == null || activeBlend != null) { // Blend from the current camera position CameraState state = (activeBlend != null) ? activeBlend.State : State; camA = new StaticPointVirtualCamera(state, (activeBlend != null) ? "Mid-blend" : "(none)"); } return(new CinemachineBlend(camA, camB, blendCurve, 0)); }
private CinemachineBlend CreateBlend( ICinemachineCamera camA, ICinemachineCamera camB, AnimationCurve blendCurve, float duration, CinemachineBlend activeBlend, float deltaTime) { if (blendCurve == null || duration <= 0 || camA == null && camB == null) return null; if (camA == null || activeBlend != null) { // Blend from the current camera position var state = activeBlend != null ? activeBlend.State : State; camA = new StaticPointVirtualCamera(state, activeBlend != null ? "Mid-blend" : "(none)"); } return new CinemachineBlend(camA, camB, blendCurve, duration, 0); }
private CinemachineBlend CreateBlend( ICinemachineCamera camA, ICinemachineCamera camB, CinemachineBlendDefinition blend, CinemachineBlend activeBlend, float deltaTime) { if (blend.BlendCurve == null || blend.m_Time <= 0 || (camA == null && camB == null)) { return(null); } if (activeBlend != null) { camA = new BlendSourceVirtualCamera(activeBlend, deltaTime); } else if (camA == null) { camA = new StaticPointVirtualCamera(State, "(none)"); } return(new CinemachineBlend(camA, camB, blend.BlendCurve, blend.m_Time, 0)); }
private CinemachineBlend CreateBlend(ICinemachineCamera camA, ICinemachineCamera camB, AnimationCurve blendCurve, float duration, CinemachineBlend activeBlend) { if (blendCurve == null || duration <= 0f || (camA == null && camB == null)) { return(null); } if (camA == null || activeBlend != null) { CameraState state = CameraState.Default; if (activeBlend != null) { state = activeBlend.State; } else { state.RawPosition = base.transform.position; state.RawOrientation = base.transform.rotation; state.Lens = LensSettings.FromCamera(this.OutputCamera); } camA = new StaticPointVirtualCamera(state, (activeBlend == null) ? "(none)" : "Mid-blend"); } return(new CinemachineBlend(camA, camB, blendCurve, duration, 0f)); }
/// <summary> /// Create a blend from one ICinemachineCamera to another, /// or to/from a point, if we can't do anything else /// </summary> private CinemachineBlend CreateBlend( ICinemachineCamera camA, ICinemachineCamera camB, CinemachineBlendDefinition blendDef, CinemachineBlend activeBlend, float deltaTime) { if (blendDef.BlendCurve == null || blendDef.m_Time <= 0 || (camA == null && camB == null)) { return(null); } if (activeBlend != null) { camA = new BlendSourceVirtualCamera(activeBlend, deltaTime); } else if (camA == null) { // Blend from the current camera position CameraState state = CameraState.Default; state.RawPosition = transform.position; state.RawOrientation = transform.rotation; state.Lens = LensSettings.FromCamera(OutputCamera); camA = new StaticPointVirtualCamera(state, "(none)"); } return(new CinemachineBlend(camA, camB, blendDef.BlendCurve, blendDef.m_Time, 0)); }