public void SetCurve(CatmullRomCurve pCurve, float pProgress) { _curve = pCurve; _progress = pProgress; transform.localPosition = _curve.GetPointOnPath(pProgress); }
void OnSceneGUI() { if (_target.enabled) { if (_target.nodes.Count > 0) { bool dirty = false; //allow path adjustment undo: Undo.RecordObject(_target, "Adjust Curve"); //node handle display: Vector3 newWorldPosition; Vector3 oldWorldPosition; for (int i = 0; i < _target.nodes.Count; i++) { if (_target.isLocal) { oldWorldPosition = _target.transform.TransformPoint(_target.nodes[i]); } else { oldWorldPosition = _target.nodes[i]; } if (i == 0) { Handles.Label(oldWorldPosition, "Begin", style); } if (i == _target.nodes.Count - 1) { Handles.Label(oldWorldPosition, "End", style); } newWorldPosition = Handles.PositionHandle(oldWorldPosition, Quaternion.identity); if (newWorldPosition != oldWorldPosition) { dirty = true; } if (_target.isLocal) { _target.nodes[i] = _target.transform.InverseTransformPoint(newWorldPosition); } else { _target.nodes[i] = newWorldPosition; } } if (dirty) { _curve = _target.GetWorldSpaceCurve(); } Vector3 prevPt = _curve.GetPointOnPath(0); Handles.color = _target.pathColor; int numLines = _target.nodes.Count * _target.smoothAmount; for (int i = 1; i <= numLines; i++) { float pm = (float)i / numLines; Vector3 currPt = _curve.GetPointOnPath(pm); Handles.DrawLine(currPt, prevPt); prevPt = currPt; } } } }