コード例 #1
0
        public void ReIndex()
        {
            var searchStepSize = 0.00001f;
            var length         = spline.GetLength(searchStepSize);
            var indexSize      = Mathf.FloorToInt(length * 2);
            var _linearPoints  = new List <Vector3>(indexSize);
            var t = 0f;

            var linearDistanceStep  = length / 1024;
            var linearDistanceStep2 = Mathf.Pow(linearDistanceStep, 2);

            var start = spline.GetNonUniformPoint(0);

            _linearPoints.Add(start);
            while (t <= 1f)
            {
                var current = spline.GetNonUniformPoint(t);
                while ((current - start).sqrMagnitude <= linearDistanceStep2)
                {
                    t      += searchStepSize;
                    current = spline.GetNonUniformPoint(t);
                }
                start = current;
                _linearPoints.Add(current);
            }
            linearPoints = _linearPoints.ToArray();
        }
コード例 #2
0
        static void DrawGizmo(SplineComponent spline, int stepCount)
        {
            if (spline.points.Count > 0)
            {
                var P     = 0f;
                var start = spline.GetNonUniformPoint(0);
                var step  = 1f / stepCount;
                do
                {
                    P += step;
                    var here = spline.GetNonUniformPoint(P);
                    Gizmos.DrawLine(start, here);
                    start = here;
                } while (P + step <= 1);

                Handles.color = Color.green;
                foreach (var i in spline.points)
                {
                    if (i.y != 0 || Tools.pivotRotation == PivotRotation.Global)
                    {
                        var cp  = spline.transform.TransformPoint(i);
                        var end = cp;
                        var up  = spline.transform.up;
                        if (Tools.pivotRotation == PivotRotation.Local)
                        {
                            end   = i;
                            end.y = 0;
                            end   = spline.transform.TransformPoint(end);
                        }
                        else
                        {
                            end.y = 0;
                            up    = Vector3.up;
                        }
                        if ((cp - end).sqrMagnitude > 0)
                        {
                            Handles.DrawDottedLine(cp, end, 4);
                            var discSize = HandleUtility.GetHandleSize(end) * 0.25f;
                            Handles.DrawWireDisc(end, up, discSize);
                        }
                    }
                }
                Handles.color = Color.white;
            }
        }