Exemple #1
0
        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;
            }
        }