Esempio n. 1
0
        private void ShowDirections()
        {
            Handles.color = Color.green;
            Vector3 point = spline.GetPoint(0f);

            Handles.DrawLine(point, point + spline.GetDirection(0f) * directionScale);
            int steps = stepsPerCurve * spline.CurveCount;

            for (int i = 1; i <= steps; i++)
            {
                point = spline.GetPoint(i / (float)steps);
                Handles.DrawLine(point, point + spline.GetDirection(i / (float)steps) * directionScale);
            }
        }
Esempio n. 2
0
        private void Awake()
        {
            if (frequency <= 0 || items == null || items.Length == 0)
            {
                return;
            }
            float stepSize = frequency * items.Length;

            if (spline.Loop || stepSize == 1)
            {
                stepSize = 1f / stepSize;
            }
            else
            {
                stepSize = 1f / (stepSize - 1);
            }
            for (int p = 0, f = 0; f < frequency; f++)
            {
                for (int i = 0; i < items.Length; i++, p++)
                {
                    Transform item     = Instantiate(items[i]) as Transform;
                    Vector3   position = spline.GetPoint(p * stepSize);
                    item.transform.localPosition = position;
                    if (lookForward)
                    {
                        item.transform.LookAt(position + spline.GetDirection(p * stepSize));
                    }
                    item.transform.parent = transform;
                }
            }
        }
Esempio n. 3
0
        private void Update()
        {
            if (goingForward)
            {
                progress += Time.deltaTime / duration;
                if (progress > 1f)
                {
                    if (mode == SplineWalkerMode.Once)
                    {
                        progress = 1f;
                    }
                    else if (mode == SplineWalkerMode.Loop)
                    {
                        progress -= 1f;
                    }
                    else
                    {
                        progress     = 2f - progress;
                        goingForward = false;
                    }
                }
            }
            else
            {
                progress -= Time.deltaTime / duration;
                if (progress < 0f)
                {
                    progress     = -progress;
                    goingForward = true;
                }
            }

            Vector3 position = spline.GetPoint(progress);

            transform.localPosition = position;
            if (lookForward)
            {
                transform.LookAt(position + spline.GetDirection(progress));
            }
        }