/// <summary> /// Resetting all additional layers' weights to zero (lerp but reaching value) /// </summary> public static void ResetLayersWeights(Animator animator, float speed = 10f) { for (int i = 1; i < animator.layerCount; i++) { animator.SetLayerWeight(i, FLogicMethods.FLerp(animator.GetLayerWeight(i), 0f, Time.deltaTime * speed)); } }
/// <summary> /// Transitioning value of animator layer's weight to target with smooth effect /// </summary> public static void LerpLayerWeight(Animator animator, int layer = 0, float newValue = 1f, float speed = 8f) { float newWeight = animator.GetLayerWeight(layer); newWeight = FLogicMethods.FLerp(newWeight, newValue, Time.deltaTime * speed); animator.SetLayerWeight(layer, newWeight); }
/// <summary> /// Changing float parameter value smoothly (when speed value about 10, 60 is instant) /// </summary> public void SetFloat(string parameter, float value = 0f, float deltaSpeed = 60f) { float newValue = Animator.GetFloat(parameter); newValue = FLogicMethods.FLerp(newValue, value, Time.deltaTime * deltaSpeed); Animator.SetFloat(parameter, newValue); }
/// <summary> /// Sets animator's float value with lerp /// </summary> public static void LerpFloatValue(Animator animator, string name = "RunWalk", float value = 0f, float deltaSpeed = 8f) { float newValue = animator.GetFloat(name); newValue = FLogicMethods.FLerp(newValue, value, Time.deltaTime * deltaSpeed); animator.SetFloat(name, newValue); }
protected override Quaternion CalculateTargetRotation(Vector3 startLookPos, Vector3 currentPos, FTail_Point previousTailPoint = null, FTail_Point currentTailPoint = null, int lookDirectionFixIndex = 0) { if (Lock2D) { return(FLogicMethods.TopDownAnglePosition2D(startLookPos, currentPos)); } else { return(base.CalculateTargetRotation(startLookPos, currentPos, previousTailPoint, currentTailPoint, lookDirectionFixIndex)); } }
/// <summary> /// Changing float parameter value smoothly (when speed value about 10, 60 is instant) /// </summary> public void SetFloatUnscaledDelta(string parameter, float value = 0f, float deltaSpeed = 60f) { float newValue = Animator.GetFloat(parameter); if (deltaSpeed >= 60f) { newValue = value; } else { newValue = FLogicMethods.FLerp(newValue, value, Time.unscaledDeltaTime * deltaSpeed); } Animator.SetFloat(parameter, newValue); }
internal virtual void RotationCalculations() { // Then we can rotate object to target look in y axis Quaternion targetRotation = helperRotation; targetRotation = Quaternion.Euler(Mathf.Clamp(FLogicMethods.WrapAngle(targetRotation.eulerAngles.x), -MaxForwardRotation, MaxForwardRotation) * (1 - MildForwardValue), targetRotation.eulerAngles.y, Mathf.Clamp(FLogicMethods.WrapAngle(targetRotation.eulerAngles.z), -MaxHorizontalRotation, MaxHorizontalRotation) * (1 - MildHorizontalValue)); if (TotalSmoother == 0f) { TransformToRotate.rotation = targetRotation * Quaternion.AngleAxis(UpAxisRotation, Vector3.up); } else { Quaternion yRotation = Quaternion.AngleAxis(UpAxisRotation, Vector3.up); TransformToRotate.rotation *= Quaternion.Inverse(yRotation); TransformToRotate.rotation = Quaternion.Slerp(TransformToRotate.rotation, targetRotation, deltaTime * Mathf.Lerp(50f, 1f, TotalSmoother)); TransformToRotate.rotation *= yRotation; } LastRotation = TransformToRotate.rotation; }
/// <summary> /// Wrapping angles vector to be always between -180 to 180 degrees /// </summary> private Vector3 WrapVector(Vector3 v) { return(new Vector3(FLogicMethods.WrapAngle(v.x), FLogicMethods.WrapAngle(v.y), FLogicMethods.WrapAngle(v.z))); }
protected Quaternion CalculateFor2D(FTail_Point tailPoint) { Quaternion targetRotation; if (FullCorrection) { Vector3 startLookPos = tailPoint.BackPoint.Position; Vector3 lookingAt = tailPoint.RotationTargetPos; targetRotation = Quaternion.identity; if (LookUpMethod != FELookUpMethod.Parental) { startLookPos += tailPoint.BackPoint.TransformDirection(tailPoint.BackPoint.LookDirection) * tailPoint.InitBoneLength * tailPoint.ScaleFactor * sensitivityPower; startLookPos -= (tailPoint.BackPoint.PreCollisionPosition - tailPoint.BackPoint.Position) * CollisionSwapping; if (startLookPos - lookingAt != Vector3.zero) { targetRotation = FLogicMethods.TopDownAnglePosition2D(lookingAt, startLookPos); } targetRotation *= Quaternion.FromToRotation(tailPoint.BackPoint.LookDirection, ExtraToDirection); } else // Parental method { startLookPos += tailPoint.BackPoint.TransformDirection(tailPoint.BackPoint.LookDirection) * tailPoint.InitBoneLength * tailPoint.ScaleFactor * sensitivityPower; Vector3 targetPos = lookingAt - startLookPos; Quaternion targetingRot = Quaternion.FromToRotation(tailPoint.BackPoint.TransformDirection(tailPoint.Transform.localPosition), targetPos); targetRotation = targetingRot * tailPoint.BackPoint.Rotation; } if (Curving != Vector3.zero) { float mul = 10 / ((float)tailPoint.index * 4.5f + 1f); targetRotation *= Quaternion.Euler(Curving.y * mul, Curving.x * mul, 0f); } targetRotation *= tailPoint.Correction; } else { targetRotation = Quaternion.identity; Vector3 startLookPos = tailPoint.BackPoint.Position; Vector3 lookingAt = tailPoint.RotationTargetPos; startLookPos += tailPoint.BackPoint.TransformDirection(tailPoint.BackPoint.LookDirection) * tailPoint.InitBoneLength * sensitivityPower; startLookPos -= (tailPoint.BackPoint.PreCollisionPosition - tailPoint.BackPoint.Position) * CollisionSwapping; if (startLookPos - lookingAt != Vector3.zero) { targetRotation = FLogicMethods.TopDownAnglePosition2D(startLookPos, lookingAt); } //targetRotation = Quaternion.LookRotation(startLookPos - lookingAt, tailPoint.BackPoint.TransformDirection(AxisLookBack * Mathf.Sign(FVectorMethods.VectorSum(AxisCorrection)))); if (Curving != Vector3.zero) { float mul = 10f / ((float)tailPoint.index * 4.5f + 1f); targetRotation *= Quaternion.Euler(Curving.y * mul, Curving.x * mul, 0f); } if (ExtraCorrectionOptions) { targetRotation *= Quaternion.FromToRotation(ExtraFromDirection, ExtraToDirection); } } return(targetRotation); }