예제 #1
0
        public float EstimateSegmentLength(int segment, int subdivisions = 50)
        {
            float num = 0f;

            Debug.Assert(nodes.Length > segment, "Invalid segment number.");
            SmoothBezierNode smoothBezierNode  = nodes[segment];
            SmoothBezierNode smoothBezierNode2 = nodes[segment + 1];
            Transform        transform         = smoothBezierNode.transform;
            Transform        transform2        = smoothBezierNode2.transform;
            Vector3          position          = transform.position;
            Vector3          p         = transform.position + transform.forward * smoothBezierNode.OutHandleLength;
            Vector3          p2        = transform2.position - transform2.forward * smoothBezierNode2.InHandleLength;
            Vector3          position2 = transform2.position;
            Vector3          zero      = Vector3.zero;
            Vector3          vector    = BezierMath.Interpolate(position, p, p2, position2, 0f);
            float            num2      = 1f / (float)subdivisions;

            for (int i = 0; i < subdivisions; i++)
            {
                zero   = vector;
                vector = BezierMath.Interpolate(position, p, p2, position2, num2 * (float)(i + 1));
                num   += Vector3.Distance(zero, vector);
            }
            return(num);
        }
예제 #2
0
        public Vector3 InterpolateSegment(int segment, float u)
        {
            Debug.Assert(nodes.Length > segment, "Invalid segment number.");
            SmoothBezierNode smoothBezierNode  = nodes[segment];
            SmoothBezierNode smoothBezierNode2 = nodes[segment + 1];
            Transform        transform         = smoothBezierNode.transform;
            Transform        transform2        = smoothBezierNode2.transform;
            Vector3          position          = transform.position;
            Vector3          p         = transform.position + transform.forward * smoothBezierNode.OutHandleLength;
            Vector3          p2        = transform2.position - transform2.forward * smoothBezierNode2.InHandleLength;
            Vector3          position2 = transform2.position;

            return(BezierMath.Interpolate(position, p, p2, position2, u));
        }