コード例 #1
0
    private void InitBezier()
    {
        if (BezierSpline == null)
        {
            BezierSpline = new GameObject().AddComponent <CatlikeBezierSpline>();
            BezierSpline.transform.parent   = null;//SpaceTimeParrametrs.Center;
            BezierSpline.transform.position = Vector3.zero;
        }
        if (BezierInitied)
        {
            return;
        }
        Debug.LogError("InitBezier");
        BezierInitied       = true;
        BezierSpline.points = new Vector3[Positions.Count * 3 - 2];
        BezierSpline.modes  = new CatlikeBezierControlPointMode[(int)Mathf.Ceil((BezierSpline.points.Length + 1) / 3f)];

        for (int i = 0; i < Positions.Count; i++)
        {
            BezierSpline.SetControlPoint(i * 3, Positions[i].Position);
            Vector3 currenControllPointPos = Positions[i].Position;

            if (i != 0)
            {
                Vector3 preDirPos = BezierSpline.points[(i - 1) * 3 + 1];
                BezierSpline.points[i * 3 - 1] = Vector3.Lerp(preDirPos, currenControllPointPos, 0.66f);
            }
            if (i != 0 && i != Positions.Count - 1)
            {
                Vector3 toNextCPDistance = Positions[i + 1].Position - currenControllPointPos;
                Vector3 prev             = (currenControllPointPos - BezierSpline.points[i * 3 - 1]).normalized;
                BezierSpline.points[i * 3 + 1] = currenControllPointPos + (prev * (toNextCPDistance.magnitude / 3));
            }
        }
    }
コード例 #2
0
    private void DrawSelectedPointInspector()
    {
        GUILayout.Label("Selected Point");
        EditorGUI.BeginChangeCheck();
        Vector3 point = EditorGUILayout.Vector3Field("Position", spline.GetControlPoint(selectedIndex));

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Move Point");
            EditorUtility.SetDirty(spline);
            spline.SetControlPoint(selectedIndex, point);
        }
        EditorGUI.BeginChangeCheck();
        CatlikeBezierControlPointMode mode = (CatlikeBezierControlPointMode)EditorGUILayout.EnumPopup("Mode", spline.GetControlPointMode(selectedIndex));

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Change Point Mode");
            spline.SetControlPointMode(selectedIndex, mode);
            EditorUtility.SetDirty(spline);
        }
    }