I think this probably needs some clarification.
The intention of Construction Scripts was that they could take properties as set in the Details Panel and manipulate the object dynamically based on them. The Construction Script is run repeatedly (every time an Actor is moved or a property is changed, for example) so that it can dynamically respond to the properties and environment.
Imagine we have a Blueprint with a Box Collision Component, with the following Construction Script:
Every time the Construction Script is run, it will set the extents of the Box Collision Component to the value specified. If you were to edit an instance’s box extents, they would be obliterated again by the Construction Script as soon as it was rerun (e.g. by moving the actor or setting another property). So, to protect against that possibility, the property is made read-only in the Details Panel for the Box Collision Component.
Suppose you wanted to be able to edit the box extents while constructing them with a default of (100, 100, 100). In this case, the way to do this would be to expose a Vector variable defaulting to (100, 100, 100) and use this as an input to the Set Box Extent node. This is a very simple case, but it demonstrates that the Construction Script is essentially the ‘owner’ of this property. It’s a good thing that the component property becomes read-only as changes to it would easily get lost upon rerunning the Construction Script.
OK, back to Splines. I appreciate that this is a far more complicated case. In general I would say that the same philosophy should apply: if you are leveraging a Construction Script to set points on the spline, then this isn’t strictly compatible with editing those points per-instance. When the Construction Script is run, these points would get lost. So we need to be able to specify whether to allow the Construction Script to make changes to the per-instance points or not. This is essentially what was removed in 4.9 (the ‘Allow Spline Editing Per Instance’ flag). It still exists but in a read-only form (the ‘Spline Has Been Edited’ flag).
I agree that we need some way of allowing this kind of thing to be done and I will be requesting that we work on this a little more for the next release. Meanwhile, you can make a simple local change in order to get this functionality back,
In UE4\Engine\Source\Runtime\Engine\Classes\Components\SplineComponent.h, find the following lines:
/** Whether the spline has been edited from its default by the spline component visualizer */
UPROPERTY(VisibleAnywhere, Category = Spline)
bool bSplineHasBeenEdited;
and replace them with the following:
/** Whether the spline has been edited from its default by the spline component visualizer */
UPROPERTY(EditAnywhere, Category = Spline, meta=(DisplayName="Override Construction Script"))
bool bSplineHasBeenEdited;
When your construction script has set up the points, you should be able to tick this box in the component’s details panel, and the points will then be editable as normal, while changes to the points from the Construction Script will be ignored. In order to reset the points to the Construction Script’s defaults, you can right-click on the spline and select “Reset to Default”. I hope this is a reasonable solution. I will see if we can clarify this feature design-wise for the next release.