Example #1
0
    private IEnumerator MoveBezierRoutine(Vector3 p0, Vector3 p1, Vector3 p2, AnimationCurve curve = null)
    {
        Debug.Log("BezierMove");

        float          t   = 0;
        Bezier         bez = new Bezier();
        AnimationCurve animCurve;

        if (curve != null)
        {
            animCurve = curve;
        }
        else
        {
            animCurve = bezierCurve;
        }


        while (t < 1)
        {
            Debug.Log("are we moving?");
            float   CurvePos = animCurve.Evaluate(t);
            Vector3 pos      = bez.CalculateBezierPoint(CurvePos, p0, p1, p2);
            transform.position = pos;

            t += Time.unscaledDeltaTime;
            yield return(new WaitForSecondsRealtime(Time.unscaledDeltaTime));
        }

        // Makes sure the final position is reached is reached.
        transform.position = p2;
    }
        protected virtual void CreatePosList(Vector3 end, Vector3 endRot, out List <Vector3> posList, out List <Vector3> rotList)
        {
            posList = new List <Vector3>();
            rotList = new List <Vector3>();
            Vector3 midPos = Vector3.zero;

            if (Passby != null)
            {
                midPos = Passby.position;
            }
            else
            {
                var player = FindObjectOfType <Camera>().transform;
                midPos = player.transform.position + player.transform.forward * Config.Instence.elementFoward;
            }

            var midRot = (endRot + transform.eulerAngles * 3) * 0.25f;

            if (StraightMove || IgnoreMiddle)
            {
                posList.Add(transform.position);
                rotList.Add(transform.eulerAngles);

                if (!IgnoreMiddle)
                {
                    posList.Add(midPos);
                    rotList.Add(midRot);
                }

                posList.Add(end);
                rotList.Add(endRot);
            }
            else
            {
                for (int i = 0; i < smooth; i++)
                {
                    float curr = (i + 0f) / (smooth - 1);
                    posList.Add(Bezier.CalculateBezierPoint(curr, transform.position, midPos, end));
                    rotList.Add(Bezier.CalculateBezierPoint(curr, transform.eulerAngles, midRot, endRot));
                }
            }
        }