// This gets all the control positions from the original rageSpline (which we are editing) and moves our GUI accordingly public void refreshEditorGUI() { for (int index = 0; index < rageSpline.GetPointCount(); index++) { // We are just moving the GameObject transform. No need to access the API. controlPoints[index].transform.position = rageSpline.GetPositionWorldSpace(index) + new Vector3(0f, 0f, -1f); inControlPoints[index].transform.position = rageSpline.GetInControlPositionWorldSpace(index) + new Vector3(0f, 0f, -1f); outControlPoints[index].transform.position = rageSpline.GetOutControlPositionWorldSpace(index) + new Vector3(0f, 0f, -1f); // Put the object transform center where the control point is handleLines[index].transform.position = rageSpline.GetPositionWorldSpace(index) + new Vector3(0f, 0f, -0.5f); // Set both ends of the line where the underlying in/out ctrlpoint handles are handleLines[index].SetPointWorldSpace(0, rageSpline.GetInControlPositionWorldSpace(index)); handleLines[index].SetPointWorldSpace(1, rageSpline.GetOutControlPositionWorldSpace(index)); // Handles pointing to the middle to make a straight line handleLines[index].SetOutControlPositionPointSpace(0, (rageSpline.GetPosition(index) - rageSpline.GetOutControlPosition(index)) * 0.25f); handleLines[index].SetOutControlPositionPointSpace(1, (rageSpline.GetInControlPosition(index) - rageSpline.GetPosition(index)) * 0.25f); // Since we modified the spline, we need to refresh the mesh handleLines[index].RefreshMesh(false, true, false); } }