private void SetCameraDynamicTargetRotation(GameObject target, TargetParameters.DynamicTargetRotationParameters parameters) { if (rotationCoroutine != null) { StopCoroutine(rotationCoroutine); } switch (parameters.CameraExecutionMode) { case CameraExecutionMode.Immediate: //ImmediatePositioning(position, parameters); break; case CameraExecutionMode.ConstantLerp: //StartCoroutine(ConstantLerpPositioning(position, parameters)); break; case CameraExecutionMode.NormalLerp: rotationCoroutine = StartCoroutine(FollowRotation(target, parameters)); break; case CameraExecutionMode.SmoothLerp: //StartCoroutine(SmoothLerpPositioning(position, parameters)); break; case CameraExecutionMode.CustomLerp: rotationCoroutine = StartCoroutine(customDynamicRotatingLerp(target, parameters)); break; } }
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> /// Follow the dynamic target rotation. /// </summary> /// <param name="target"></param> /// <param name="parameters"></param> /// <returns></returns> private IEnumerator FollowRotation(GameObject target, TargetParameters.DynamicTargetRotationParameters parameters) { if (parameters.DynamicRotationBehaviour == DynamicRotationBehaviour.LookAs) { while (true) { if (Quaternion.Angle(transform.rotation, target.transform.rotation) > parameters.LerpThreshold) { transform.rotation = Quaternion.Slerp(transform.rotation, target.transform.rotation, parameters.LerpSpeed * Time.deltaTime); Rotating = true; } else { Rotating = false; } yield return(null); } } else { Rotating = true; Vector3 direction; while (true) { direction = target.transform.position - transform.position; if (Vector3.Angle(transform.forward, direction) > parameters.LerpThreshold) { transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), parameters.LerpSpeed * Time.deltaTime); } else { transform.LookAt(target.transform); } yield return(null); } } }
public static void SetCameraDynamicTargetRotation(GameObject target, TargetParameters.DynamicTargetRotationParameters parameters) { SetCameraDynamicTargetRotationEvent.Invoke(target, parameters); }
public void SetDynamicCameraTarget(CameraTarget cameraTarget, TargetParameters.DynamicTargetPositionParameters posParameters, TargetParameters.DynamicTargetRotationParameters rotParameters) { CameraEventSystem.SetCameraDynamicTargetPosition(cameraTarget.gameObject, posParameters); CameraEventSystem.SetCameraDynamicTargetRotation(cameraTarget.gameObject, rotParameters); }