If in First blueprint rename variable, used in Second blueprint, Second blueprint not marked as dirty and PIE recompile only First blueprint.
Steps:
- Create blank blueprint project;
- In content browser create Actor blueprint class, named “BP_B”;
- Add to BP_B integer variable, named “var”, and PrintString this variable in EventTick;
- In content browser create Actor blueprint class, named BP_A;
- Add to BP_A BP_B variable, named “B”, in EventBeginPlay add SpawnActor BP_B and save ReturnValue to this variable;
- In BP_A in EventTick increment B.var (Get, +, Set);
- Run PIE, watch on screen how the variable B.var increases;
- Rename BP_B variable “var” to “old”;
- Watch that the BP_B marked as Unsaved and Dirty, but BP_A only marked as Unsaved, not Dirty;
- In BP_A graph Get and Set nodes changed to “old”;
- Run PIE, watch that the variable B.old does not change;
- Watch error in Output Log: “PIE: Error: Blueprint Runtime Error: Attempted to access missing property ‘None’. … PIE: Error: Blueprint Runtime Error: Attempted to assign to None from function: ‘ExecuteUbergraph_BP_A’ …”
To fix this, I need to manually compile the blueprint BP_A, but it is not marked as Dirty, it’s not obvious.
When changing the name of a variable, all the blueprints that used this variable should be marked as dirty.
Affected 4.18.3, 4.19 Preview
Issue tracker UE-55369