private void DrawOverlappedStep(Vector2 offset) { float r = .02f; int count = 20; float delta = 1f / count; Color[] colors = { Color.red, Color.green, Color.blue, Color.yellow, Color.magenta, Color.cyan }; float overlap = .5f; int objCount = 3; Vector2[] prev = new Vector2[objCount]; for (int k = 0; k < objCount; ++k) { prev[k] = new Vector2(0, Mathfex.EvalOverlappedStep(0f, overlap, k, objCount)); Gizmos.color = colors[k % colors.Length]; Gizmos.DrawSphere(prev[k] + offset, r); } Vector2[] curr = new Vector2[3]; for (int i = 1; i <= count; ++i) { float x = i * delta; for (int k = 0; k < objCount; ++k) { curr[k] = new Vector2(x, Mathfex.EvalOverlappedStep(x, overlap, k, objCount)); Gizmos.color = colors[k % colors.Length]; Gizmos.DrawLine(prev[k] + offset, curr[k] + offset); Gizmos.DrawSphere(curr[k] + offset, r); prev[k] = curr[k]; } } }
private void Update() { float halfTime = Time * .5f; if (_timer < halfTime) { float coeff = _timer / halfTime; for (int i = 0; i < AnimatedObjects.Length; ++i) { float itemCoeff = Mathfex.EvalOverlappedStep(coeff, Overlap, i, AnimatedObjects.Length); itemCoeff = EvalInOut(itemCoeff, LeftType); float coord = Mathf.Lerp(Left, Middle, itemCoeff); Vector3 position = AnimatedObjects[i].position; position.x = coord; AnimatedObjects[i].position = position; } } else { float coeff = (_timer - halfTime) / halfTime; for (int i = 0; i < AnimatedObjects.Length; ++i) { float itemCoeff = Mathfex.EvalOverlappedStep(coeff, Overlap, i, AnimatedObjects.Length); itemCoeff = EvalInOut(itemCoeff, RightType); float coord = Mathf.Lerp(Middle, Right, itemCoeff); Vector3 position = AnimatedObjects[i].position; position.x = coord; AnimatedObjects[i].position = position; } } _timer += UnityEngine.Time.deltaTime; if (_timer > Time) { _timer -= Time; } }