private void LateUpdate()
        {
            float t = NormalizedT;
            BezierSplineAdvanced spline = Spline;
            bool forward = MovingForward;

            for (int i = 0; i < tailObjects.Count; i++)
            {
                Transform tailObject = tailObjects[i];
                float     dt         = Time.deltaTime;

                if (forward)
                {
                    tailObject.position = spline.MoveAlongSpline(ref t, -tailObjectDistances[i]);

                    if (lookForward)
                    {
                        tailObject.rotation = Quaternion.Lerp(tailObject.rotation, Quaternion.LookRotation(spline.GetTangent(t)), rotationLerpModifier * dt);
                    }
                }
                else
                {
                    tailObject.position = spline.MoveAlongSpline(ref t, tailObjectDistances[i]);

                    if (lookForward)
                    {
                        tailObject.rotation = Quaternion.Lerp(tailObject.rotation, Quaternion.LookRotation(-spline.GetTangent(t)), rotationLerpModifier * dt);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public static void DrawSplineDetailed(BezierSplineAdvanced spline)
        {
            if (spline.Count < 2)
            {
                return;
            }

            BezierPoint endPoint0 = null, endPoint1 = null;

            for (int i = 0; i < spline.Count - 1; i++)
            {
                endPoint0 = spline[i];
                endPoint1 = spline[i + 1];

                DrawBezier(endPoint0, endPoint1);
            }

            if (spline.loop && endPoint1 != null)
            {
                DrawBezier(endPoint1, spline[0]);
            }

            // Draw tangent lines on scene view
            //Color _tmp = Handles.color;
            //Handles.color = Color.cyan;
            //for( float i = 0f; i < 1f; i += 0.05f )
            //{
            //	Handles.DrawLine( spline.GetPoint( i ), spline.GetPoint( i ) + spline.GetTangent( i ) );
            //}
            //Handles.color = _tmp;
        }
Ejemplo n.º 3
0
        void OnEnable()
        {
            spline = target as BezierSplineAdvanced;
            spline.Refresh();

            Undo.undoRedoPerformed -= OnUndoRedo;
            Undo.undoRedoPerformed += OnUndoRedo;
        }
Ejemplo n.º 4
0
        void OnEnable()
        {
            point  = target as BezierPoint;
            spline = point.GetComponentInParent <BezierSplineAdvanced>();

            if (spline != null && !spline.Equals(null))
            {
                spline.Refresh();
            }

            Undo.undoRedoPerformed -= OnUndoRedo;
            Undo.undoRedoPerformed += OnUndoRedo;
        }
Ejemplo n.º 5
0
        static void DrawSplineGizmo(BezierSplineAdvanced spline, GizmoType gizmoType)
        {
            if (spline.Count < 2)
            {
                return;
            }

            Gizmos.color = SPLINE_GIZMO_COLOR;

            Vector3 lastPos        = spline[0].position;
            float   increaseAmount = 1f / (spline.Count * SPLINE_GIZMO_SMOOTHNESS);

            for (float i = increaseAmount; i < 1f; i += increaseAmount)
            {
                Vector3 pos = spline.GetPoint(i);
                Gizmos.DrawLine(lastPos, pos);
                lastPos = pos;
            }

            Gizmos.DrawLine(lastPos, spline.GetPoint(1f));
        }
Ejemplo n.º 6
0
        public static void DrawSplineInspectorGUI(BezierSplineAdvanced spline)
        {
            if (spline.Count < 2)
            {
                if (GUILayout.Button("Initialize Spline"))
                {
                    spline.Reset();
                }

                return;
            }

            Color c = GUI.color;

            EditorGUI.BeginChangeCheck();
            bool loop = EditorGUILayout.Toggle("Loop", spline.loop);

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(spline, "Toggle Loop");
                spline.loop = loop;

                SceneView.RepaintAll();
            }

            EditorGUI.BeginChangeCheck();
            bool drawGizmos = EditorGUILayout.Toggle("Draw Runtime Gizmos", spline.drawGizmos);

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(spline, "Toggle Draw Gizmos");
                spline.drawGizmos = drawGizmos;

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            GUI.color = AUTO_CONSTRUCT_SPLINE_BUTTON_COLOR;

            if (GUILayout.Button("Construct Linear Path"))
            {
                for (int i = 0; i < spline.Count; i++)
                {
                    Undo.RecordObject(spline[i], "Construct Linear Path");
                }

                spline.ConstructLinearPath();
                SceneView.RepaintAll();
            }

            if (GUILayout.Button("Auto Construct Spline"))
            {
                for (int i = 0; i < spline.Count; i++)
                {
                    Undo.RecordObject(spline[i], "Auto Construct Spline");
                }

                spline.AutoConstructSpline();
                SceneView.RepaintAll();
            }

            if (GUILayout.Button("Auto Construct Spline (method #2)"))
            {
                for (int i = 0; i < spline.Count; i++)
                {
                    Undo.RecordObject(spline[i], "Auto Construct Spline");
                }

                spline.AutoConstructSpline2();
                SceneView.RepaintAll();
            }

            GUI.color = c;
        }