/// <summary> /// Move the camera towards the destination, slowing down while approaching. /// </summary> /// <returns></returns> private IEnumerator NormalLerpPositioning(CameraTarget target, TargetParameters.StaticTargetPositionParameters parameters) { while (Vector3.Distance(transform.position, target.transform.position) > parameters.LerpThreshold) { transform.position = Vector3.Lerp(transform.position, target.transform.position, parameters.LerpSpeed * Time.deltaTime); yield return(null); } CameraEventSystem.CameraTargetPositionReached(target, parameters); }
/// <summary> /// Move the camera towards the destination at constant speed, reaching in the given time. /// </summary> /// <returns></returns> private IEnumerator ConstantLerpPositioning(CameraTarget target, TargetParameters.StaticTargetPositionParameters parameters) { float elapsedPositioningLerpTime = 0; Vector3 startingPosition = transform.position; float step; while (elapsedPositioningLerpTime < parameters.Duration) { step = elapsedPositioningLerpTime / parameters.Duration; elapsedPositioningLerpTime += Time.deltaTime; transform.position = Vector3.Lerp(startingPosition, target.transform.position, step); yield return(null); } CameraEventSystem.CameraTargetPositionReached(target, parameters); }
private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { if (TreatTargetAs == TargetType.Static) //STATIC TARGET { TargetParameters.StaticTargetRotationParameters rotParams = TargetParameters.GetDefaultStaticRotationParameters(); rotParams.Duration = 8f; cameraTest.SetStaticCameraTarget(Target, rotParams); TargetParameters.StaticTargetPositionParameters posParams = TargetParameters.GetDefaultStaticPositionParameters(); posParams.CameraExecutionMode = CameraExecutionMode.CustomLerp; posParams.StartSCParameters.SinIntensityChangeTimer = 2f; posParams.StartSCParameters.CosIntensityChangeTimer = 2f; posParams.StartSCParameters.MinCosIntensity = 0.1f; posParams.StartSCParameters.MaxCosIntensity = 0.12f; posParams.StartSCParameters.MinSinIntensity = 0.1f; posParams.StartSCParameters.MaxSinIntensity = 0.11f; posParams.SteadyCamOnStart = SteadyCamBehaviour.TurnOnAndOverride; posParams.SteadyCamOnEnd = SteadyCamBehaviour.TurnOnAndOverride; cameraTest.SetStaticCameraTarget(Target, posParams); } else //DYNAMIC TARGET { TargetParameters.DynamicTargetPositionParameters dynamicPosParams = TargetParameters.GetDefaultDynamicPositionParameters(); dynamicPosParams.LerpSpeed = 2f; cameraTest.SetDynamicCameraTarget(Target.transform.GetChild(0).GetComponent <CameraTarget>(), dynamicPosParams); TargetParameters.DynamicTargetRotationParameters dynamicRotParams = TargetParameters.GetDefaultDynamicRotationParameters(); dynamicRotParams.DynamicRotationBehaviour = DynamicRotationBehaviour.LookAt; dynamicRotParams.LerpSpeed = 5f; cameraTest.SetDynamicCameraTarget(Target, dynamicRotParams); } } //else if (Input.GetKey(KeyCode.LeftControl)) //{ // NextTarget(); //} }
/// <summary> /// The camera has reached the target position. /// </summary> private void CameraTargetPositionReached(CameraTarget target, TargetParameters.StaticTargetPositionParameters parameters) { Moving = false; Debug.Log("POSITION REACHED"); switch (parameters.SteadyCamOnEnd) { case SteadyCamBehaviour.Ignore: return; case SteadyCamBehaviour.TurnOnAndOverride: if (steadyCamCoroutine == null) { ActivateSteadyCam(parameters.EndSCParameters); } else { steadyCamParameters = parameters.EndSCParameters; } break; case SteadyCamBehaviour.TurnOff: if (steadyCamCoroutine != null) { StopCoroutine(steadyCamCoroutine); StartCoroutine(RecenterCamera()); } break; case SteadyCamBehaviour.OverrideIfOn: if (steadyCamCoroutine != null) { steadyCamParameters = parameters.EndSCParameters; } break; } }
public static void CameraTargetPositionReached(CameraTarget reachedTarget, TargetParameters.StaticTargetPositionParameters parameters) { CameraTargetPositionReachedEvent.Invoke(reachedTarget, parameters); }
public static void SetCameraStaticTargetPosition(CameraTarget targetPosition, TargetParameters.StaticTargetPositionParameters parameters) { SetCameraStaticTargetPositionEvent.Invoke(targetPosition, parameters); }
public void SetStaticCameraTarget(CameraTarget cameraTarget, TargetParameters.StaticTargetPositionParameters posParameters, TargetParameters.StaticTargetRotationParameters rotParameters) { CameraEventSystem.SetCameraStaticTargetPosition(cameraTarget, posParameters); CameraEventSystem.SetCameraStaticTargetRotation(cameraTarget, rotParameters); }
/// <summary> /// Immediately move the camera to match the target position. /// </summary> private void ImmediatePositioning(CameraTarget target, TargetParameters.StaticTargetPositionParameters parameters) { transform.position = target.transform.position; CameraEventSystem.CameraTargetPositionReached(target, parameters); }
private void SetCameraStaticTargetPosition(CameraTarget target, TargetParameters.StaticTargetPositionParameters parameters) { if (positionCoroutine != null) { StopCoroutine(positionCoroutine); } switch (parameters.CameraExecutionMode) { case CameraExecutionMode.Immediate: ImmediatePositioning(target, parameters); break; case CameraExecutionMode.ConstantLerp: positionCoroutine = StartCoroutine(ConstantLerpPositioning(target, parameters)); break; case CameraExecutionMode.NormalLerp: positionCoroutine = StartCoroutine(NormalLerpPositioning(target, parameters)); break; case CameraExecutionMode.SmoothLerp: positionCoroutine = StartCoroutine(SmoothLerpPositioning(target, parameters)); break; case CameraExecutionMode.CustomLerp: positionCoroutine = StartCoroutine(customStaticPositioningLerp(target, parameters)); break; } Moving = true; switch (parameters.SteadyCamOnStart) { case SteadyCamBehaviour.Ignore: return; case SteadyCamBehaviour.TurnOnAndOverride: if (steadyCamCoroutine == null) { ActivateSteadyCam(parameters.StartSCParameters); } else { steadyCamParameters = parameters.StartSCParameters; } break; case SteadyCamBehaviour.TurnOff: if (steadyCamCoroutine != null) { StopCoroutine(steadyCamCoroutine); StartCoroutine(RecenterCamera()); } break; case SteadyCamBehaviour.OverrideIfOn: if (steadyCamCoroutine != null) { steadyCamParameters = parameters.StartSCParameters; } break; } }