private static void ChangePosition(ControllerStick controller, float newPosition) { ControllerStickEditor pointsEditor = (ControllerStickEditor)UnityEditor.Editor.CreateEditor((ControllerStick)controller, typeof(ControllerStickEditor)); pointsEditor.ChangePosition(newPosition); GameObject.DestroyImmediate(pointsEditor); }
private static void ApplyPosition(StickFromMouseSceneView stick, SceneView sceneView) { Ray mouseRay = CalculateMousePosition(sceneView); if (SplineLister.Instance != null && SplineLister.Instance.SplineCount > 0) { List <SplineBase> splines = SplineLister.Instance.GetSplineBases(); Vector3[] closestSpline = new Vector3[splines.Count]; float[] closestPathPosition = new float[splines.Count]; for (int i = 0; i < splines.Count; i++) { float closest = splines[i].FindClosestPointFromRay(mouseRay, 100, 1, stick.PositionUnits); closestSpline[i] = splines[i].EvaluatePositionAtUnit(closest, stick.PositionUnits); closestPathPosition[i] = closest; } int closestIndex = GetClosestPointToRay(mouseRay, out float minDist, closestSpline); ControllerStickEditor pointsEditor = (ControllerStickEditor)UnityEditor.Editor.CreateEditor((ControllerStick)stick.ControllerStick, typeof(ControllerStickEditor)); pointsEditor.ChangeSplineAndPosition(splines[closestIndex], closestPathPosition[closestIndex]); GameObject.DestroyImmediate(pointsEditor); } else { float closest = stick.Spline.FindClosestPointFromRay(mouseRay, 100, 1, stick.PositionUnits); ChangePosition(stick.ControllerStick, closest); } }