void Awake() { currentLookPoint = player.position; circleStartRadius = circleRadius; if (!useTwoSmoothZones) { switch (smoothTypeInnerCircle) { case InnerSmoothingType.DontFollow: smoothTypeOuterCircle = OuterSmoothingType.Instant; break; case InnerSmoothingType.Exponential: smoothTypeOuterCircle = OuterSmoothingType.Exponential; break; case InnerSmoothingType.Spring: smoothTypeOuterCircle = OuterSmoothingType.Spring; break; case InnerSmoothingType.DampedSpring: smoothTypeOuterCircle = OuterSmoothingType.DampedSpring; break; case InnerSmoothingType.Instant: smoothTypeOuterCircle = OuterSmoothingType.Instant; break; } outerFollowSpeed = innerFollowSpeed; if (smoothTypeInnerCircle == InnerSmoothingType.DontFollow) { Debug.Log("CANT USE DONT FOLLOW WITH ONLY ONE SMOOTH ZONE"); } } }
private Vector3[] UpdateLookPoint(Vector3 playerPos, InnerSmoothingType it, OuterSmoothingType ot) { float lookPointToPlayerDist = Vector3.Distance(playerPos, currentLookPoint); float dt = Time.unscaledDeltaTime; Vector3[] outPut = new Vector3[2]; switch (it) { case InnerSmoothingType.DontFollow: velocity = Vector3.zero; break; case InnerSmoothingType.Exponential: velocity = playerPos - currentLookPoint; break; case InnerSmoothingType.Spring: var n1 = velocity - (currentLookPoint - playerPos) * (innerFollowSpeed * dt * innerFollowSpeed); var n2 = 1 + dt; velocity = n1 / (n2 * n2); break; case InnerSmoothingType.DampedSpring: var n3 = velocity - (currentLookPoint - playerPos) * (innerFollowSpeed * innerFollowSpeed * dt * innerFollowSpeed); var n4 = 1 + innerFollowSpeed * dt * innerFollowSpeed; velocity = n3 / (n4 * n4); break; } if (smoothTypeInnerCircle != InnerSmoothingType.Instant) { if (velocity.magnitude * dt < Vector3.Distance(playerPos, currentLookPoint)) { outPut[0] = currentLookPoint + velocity * dt * innerFollowSpeed; } else { outPut[0] = playerPos; } } else { outPut[0] = playerPos; } switch (smoothTypeOuterCircle) { case OuterSmoothingType.Exponential: velocity = playerPos - currentLookPoint; break; case OuterSmoothingType.Spring: var n1 = velocity - (currentLookPoint - playerPos) * (innerFollowSpeed * dt * outerFollowSpeed); var n2 = 1 + dt; velocity = n1 / (n2 * n2); break; case OuterSmoothingType.DampedSpring: var n3 = velocity - (currentLookPoint - playerPos) * (innerFollowSpeed * innerFollowSpeed * dt * outerFollowSpeed); var n4 = 1 + innerFollowSpeed * dt * outerFollowSpeed; velocity = n3 / (n4 * n4); break; } if (smoothTypeOuterCircle != OuterSmoothingType.Instant) { outPut[1] = currentLookPoint + velocity * dt * outerFollowSpeed; } else { outPut[1] = Vector3.Lerp(playerPos, currentLookPoint, circleRadius / lookPointToPlayerDist); } return(outPut); }