示例#1
0
        public override void OnInspectorGUI()
        {
            //base.OnInspectorGUI();

            if (!SelectSpline.IsInit)
            {
                SelectSpline.Init();
            }

            EditorGUI.BeginChangeCheck();
            bool IsLoop = GUILayout.Toggle(SelectSpline.IsClosedLoop(), "是否循环");

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(SelectSpline, "样线循环");
                EditorUtility.SetDirty(SelectSpline);
                SelectSpline.SetClosedLoop(IsLoop, true);
            }

            EditorGUI.BeginChangeCheck();
            SelectSpline.DrawDebug = GUILayout.Toggle(SelectSpline.DrawDebug, "是否绘制样线");
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(SelectSpline, "绘制样线");
                EditorUtility.SetDirty(SelectSpline);
                Repaint();
            }

            if (m_selectedIndex != -1)
            {
                DrawSelectedPointInspector();
            }

            if (GUILayout.Button("尾部加点"))
            {
                Undo.RecordObject(SelectSpline, "尾部加点");

                int lastIndex = SelectSpline.GetSplineCurvesPosition().Points.Count - 1;

                FSplinePoint newPoint = new FSplinePoint(
                    SelectSpline.GetSplineCurvesPosition().Points[lastIndex].InVal + 1,
                    SelectSpline.GetSplineCurvesPosition().Points[lastIndex].OutVal + new Vector3(10, 0),
                    SelectSpline.GetSplineCurvesPosition().Points[lastIndex].LeaveTangent
                    );
                SelectSpline.AddPoint(newPoint);
                EditorUtility.SetDirty(SelectSpline);
            }
        }
示例#2
0
        /// <summary>
        /// 添加样线关键点
        /// </summary>
        public void AddPoint(FSplinePoint InSplinePoint, bool bUpdateSpline = true)
        {
            int Index = UpperBound(SplineCurves.Position.Points, InSplinePoint.InputKey);


            SplineCurves.Position.Points.Insert(Index, new FInterpCurveVectorPoint
                                                (
                                                    InSplinePoint.InputKey,
                                                    InSplinePoint.Position,
                                                    InSplinePoint.ArriveTangent,
                                                    InSplinePoint.LeaveTangent,
                                                    InSplinePoint.Type
                                                ));

            SplineCurves.Rotation.Points.Insert(Index, new FInterpCurveQuaternionPoint
                                                (
                                                    InSplinePoint.InputKey,
                                                    InSplinePoint.Rotation,
                                                    Quaternion.identity,
                                                    Quaternion.identity,
                                                    ESplinePointType.Curve
                                                ));
            SplineCurves.Scale.Points.Insert(Index, new FInterpCurveVectorPoint
                                             (
                                                 InSplinePoint.InputKey,
                                                 InSplinePoint.Scale,
                                                 Vector3.zero,
                                                 Vector3.zero,
                                                 ESplinePointType.Curve
                                             ));

            if (bLoopPositionOverride && LoopPosition <= SplineCurves.Position.Points.Last().InVal)
            {
                bLoopPositionOverride = false;
            }

            if (bUpdateSpline)
            {
                UpdateSpline();
            }
        }