protected virtual void OnGUISpline(ref Rect contentRect, Maker maker) { var editorVarPointsProperty = maker.EditorVarPointsProperty; contentRect.height = InterpolatorPropertyDrawer.heightField; var oldSize = editorVarPointsProperty.arraySize; var newSize = Mathf.Max(EditorGUI.IntField(contentRect, "Count", oldSize), 3); contentRect.y += InterpolatorPropertyDrawer.heightField; if (oldSize != newSize) { editorVarPointsProperty.arraySize = newSize; maker.Apply(); } var x = contentRect.xMin; var w = contentRect.width; var wh = w * 0.5f; contentRect.width = wh; for (int n = 0; n < newSize; ++n) { var elemProperty = editorVarPointsProperty.GetArrayElementAtIndex(n); var keyProperty = elemProperty.FindPropertyRelative("key"); var valueProperty = elemProperty.FindPropertyRelative("value"); var y = contentRect.yMin; this.OnGUIFloat(ref contentRect, keyProperty.floatValue, string.Format("[{0}] Key", n), (newValue) => { keyProperty.floatValue = newValue; maker.Apply(); }); contentRect.xMin += wh; contentRect.yMin = y; this.OnGUIFloat(ref contentRect, elemProperty.FindPropertyRelative("value").floatValue, "Value", (newValue) => { valueProperty.floatValue = newValue; maker.Apply(); }); contentRect.xMin = x; } contentRect.width = w; this.OnGUICurve(ref contentRect, maker.DummyInstance); }