コード例 #1
0
    public float GetPathPercentageAtPoint(CameraPathBezierControlPoint point)
    {
        List <CameraPathBezierControlPoint> cps = new List <CameraPathBezierControlPoint>(_controlPoints);
        int index = cps.IndexOf(point);

        return(((float)index) / ((float)numberOfCurves));
    }
コード例 #2
0
    //Delete a point in the path specified by the point itself.
    //deletePoint - component of the point
    //destroy - should the gameboject be destoryed?
    public void DeletePoint(CameraPathBezierControlPoint deletePoint, bool destroy)
    {
        List <CameraPathBezierControlPoint> rebuildList = new List <CameraPathBezierControlPoint>(_controlPoints);

        rebuildList.Remove(deletePoint);
        _controlPoints = rebuildList.ToArray();
        if (destroy)
        {
            DestroyImmediate(deletePoint.gameObject);
        }
        RecalculateStoredValues();
    }
コード例 #3
0
    //Add a new control point specified by the index of where you want to place it.
    public void AddNewPoint(int index)
    {
        GameObject newPoint = new GameObject("Control Point");

        newPoint.transform.parent = transform;

        if (numberOfControlPoints == 0)
        {
            newPoint.transform.localPosition = Vector3.zero;
        }
        else if (numberOfControlPoints == 1)
        {
            newPoint.transform.localPosition = _controlPoints[0].transform.rotation * Vector3.forward * 5.0f;
        }
        else
        {
            if (index < numberOfControlPoints)           //place point within the path
            {
                CameraPathBezierControlPoint pointA = _controlPoints[Mathf.Clamp(index - 1, 0, numberOfUseablePoints)];
                CameraPathBezierControlPoint pointB = _controlPoints[Mathf.Clamp(index, 0, numberOfUseablePoints)];
                Debug.Log(pointA.name + " " + pointB.name);
                Vector3 p0 = pointA.transform.position;
                Vector3 p1 = pointA.worldControlPoint;
                Vector3 p2 = pointB.worldControlPoint;
                Vector3 p3 = pointB.transform.position;
                newPoint.transform.position = CalculateBezierPoint(0.5f, p0, p1, p2, p3);

                Quaternion p = _controlPoints[Mathf.Clamp(index - 2, 0, numberOfUseablePoints)].transform.rotation;
                Quaternion q = _controlPoints[Mathf.Clamp(index - 1, 0, numberOfUseablePoints)].transform.rotation;
                Quaternion a = _controlPoints[Mathf.Clamp(index, 0, numberOfUseablePoints)].transform.rotation;
                Quaternion b = _controlPoints[Mathf.Clamp(index + 1, 0, numberOfUseablePoints)].transform.rotation;
                newPoint.transform.rotation = CalculateCubicRotation(p, a, b, q, 0.5f);
            }
            else
            {            //place point at the end of the path
                Vector3 endDirection = (GetPathPosition(1.0f) - GetPathPosition(0.95f)).normalized;
                newPoint.transform.position = _controlPoints[index - 1].transform.position + endDirection * 5.0f;
                newPoint.transform.rotation = _controlPoints[index - 1].transform.rotation;
            }
        }

        CameraPathBezierControlPoint cpScript = newPoint.AddComponent <CameraPathBezierControlPoint>();

        cpScript.name   = "control point " + index;
        cpScript.bezier = this;
        List <CameraPathBezierControlPoint> rebuildList = new List <CameraPathBezierControlPoint>(_controlPoints);

        rebuildList.Insert(index, cpScript);
        _controlPoints = rebuildList.ToArray();
        RecalculateStoredValues();
    }
コード例 #4
0
    //Delete a point in the path specified by the point index.
    //index - cthe index in point array to delete
    //destroy - should the gameboject be destoryed?
    public void DeletePoint(int index, bool destroy)
    {
        List <CameraPathBezierControlPoint> rebuildList = new List <CameraPathBezierControlPoint>(_controlPoints);
        CameraPathBezierControlPoint        deletePoint = rebuildList[index];

        rebuildList.RemoveAt(index);
        _controlPoints = new CameraPathBezierControlPoint[rebuildList.Count];
        _controlPoints = rebuildList.ToArray();
        if (destroy)
        {
            DestroyImmediate(deletePoint.gameObject);
        }
        RecalculateStoredValues();
    }
コード例 #5
0
 public float GetPathPercentageAtPoint(CameraPathBezierControlPoint point)
 {
     List<CameraPathBezierControlPoint> cps = new List<CameraPathBezierControlPoint>(_controlPoints);
     int index = cps.IndexOf(point);
     return ((float)index) / ((float)numberOfCurves);
 }
コード例 #6
0
 //Delete a point in the path specified by the point itself.
 //deletePoint - component of the point
 //destroy - should the gameboject be destoryed?
 public void DeletePoint(CameraPathBezierControlPoint deletePoint, bool destroy)
 {
     List<CameraPathBezierControlPoint> rebuildList = new List<CameraPathBezierControlPoint>(_controlPoints);
     rebuildList.Remove(deletePoint);
     _controlPoints = rebuildList.ToArray();
     if (destroy)
         DestroyImmediate(deletePoint.gameObject);
     RecalculateStoredValues();
 }
コード例 #7
0
    public override void OnInspectorGUI()
    {
        CameraPathBezier bezier   = (CameraPathBezier)target;
        int numberOfControlPoints = bezier.numberOfControlPoints;

        if (numberOfControlPoints > 0)
        {
            if (numberOfControlPoints > 1)
            {
                GUILayout.Space(10);
                bezier.lineColour = EditorGUILayout.ColorField("Line Colour", bezier.lineColour);
                GUILayout.Space(5);

                bezier.mode = (CameraPathBezier.viewmodes)EditorGUILayout.EnumPopup("Camera Mode", bezier.mode);
                GUILayout.Space(5);

                if (bezier.mode == CameraPathBezier.viewmodes.target)
                {
                    if (bezier.target == null)
                    {
                        EditorGUILayout.HelpBox("No target has been specified in the bezier path", MessageType.Warning);
                    }
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("Look at Target");
                    bezier.target = (Transform)EditorGUILayout.ObjectField(bezier.target, typeof(Transform), true);
                    EditorGUILayout.EndHorizontal();
                    GUILayout.Space(5);
                }

                bool newValue = EditorGUILayout.Toggle("Loop", bezier.loop);
                if (newValue != bezier.loop)
                {
                    Undo.RecordObject(bezier, "Set Loop");
                    bezier.loop = newValue;
                    bezier.RecalculateStoredValues();
                }
            }
            else
            {
                if (numberOfControlPoints == 1)
                {
                    EditorGUILayout.HelpBox("Click Add New Point to add additional points, you need at least two points to make a path.", MessageType.Info);
                }
            }

            GUILayout.Space(5);
            if (GUILayout.Button("Reset Path"))
            {
                if (EditorUtility.DisplayDialog("Resetting path?", "Are you sure you want to delete all control points?", "Delete", "Cancel"))
                {
                    //Undo.RegisterSceneUndo("Reset Camera Path");
                    bezier.ResetPath();
                    return;
                }
            }

            GUILayout.Space(10);
            GUILayout.Box(EditorGUIUtility.whiteTexture, GUILayout.Height(2), GUILayout.Width(Screen.width - 20));
            GUILayout.Space(3);

            //scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
            for (int i = 0; i < numberOfControlPoints; i++)
            {
                CameraPathBezierControlPoint go = bezier.controlPoints[i];

                if (go == null)
                {
                    go = (CameraPathBezierControlPoint)EditorGUILayout.ObjectField(null, typeof(CameraPathBezierControlPoint), true);
                }
                else
                {
                    go = (CameraPathBezierControlPoint)EditorGUILayout.ObjectField(go.name, go, typeof(CameraPathBezierControlPoint), true);
                }

                EditorGUILayout.BeginHorizontal();
                if (GUILayout.Button("Delete"))
                {
                    //Undo.RegisterSceneUndo("Delete Camera Path point");
                    bezier.DeletePoint(i, true);
                    numberOfControlPoints = bezier.numberOfControlPoints;
                    EditorUtility.SetDirty(bezier);
                    return;
                }

                if (i == numberOfControlPoints - 1)
                {
                    if (GUILayout.Button("Add New Point At End"))
                    {
                        //Undo.RegisterSceneUndo("Create a new Camera Path point");
                        bezier.AddNewPoint(i + 1);
                        EditorUtility.SetDirty(bezier);
                    }
                }
                else
                {
                    if (GUILayout.Button("Add New Point Between"))
                    {
                        //Undo.RegisterSceneUndo("Create a new Camera Path point");
                        bezier.AddNewPoint(i + 1);
                        EditorUtility.SetDirty(bezier);
                    }
                }
                EditorGUILayout.EndHorizontal();

                GUILayout.Space(7);
                GUILayout.Box(EditorGUIUtility.whiteTexture, GUILayout.Height(2), GUILayout.Width(Screen.width - 25));
                GUILayout.Space(7);
            }
            //EditorGUILayout.EndScrollView();
        }
        else
        {
            if (GUILayout.Button("Add New Point At End"))
            {
                //Undo.RegisterSceneUndo("Create a new Camera Path point");
                bezier.AddNewPoint();
                EditorUtility.SetDirty(bezier);
            }
            EditorGUILayout.HelpBox("Click Add New Point to add points and begin the path, you will need two points to create a path.", MessageType.Info);
        }

        if (GUI.changed)
        {
            bezier.RecalculateStoredValues();
            EditorUtility.SetDirty(bezier);
        }
    }
 void OnEnable()
 {
     bezierControlPoint = (CameraPathBezierControlPoint)target;
     bezier = bezierControlPoint.bezier;
     animator = bezier.GetComponent<CameraPathBezierAnimator>();
 }
コード例 #9
0
 void OnEnable()
 {
     bezierControlPoint = (CameraPathBezierControlPoint)target;
     bezier             = bezierControlPoint.bezier;
     animator           = bezier.GetComponent <CameraPathBezierAnimator>();
 }