I have a problem between two blueprints, I think it’s a simple Async.
Have:
1 - we will call a Blueprint BP_Modular
BP_Modular
- BP_Modular_child
(just modulate N StaticMeshe in X Y Z)
2 - Another Blueprint we will call BP_Procedural
BP_Procedural
- BP_Procedural_child
(Simply create N child component objects of BP_Modular_child)
So far so good.
For BP_Modular and BP_Procedural to be displayed at the time of “Edit”, the Construct has to call its own CustomEvent (CE_Init) which initializes its own logic for both cases.
The problem originates from the fact that when I click BP_Modular to compile, the editor closes with the following error
Error LogWindows Cannot generate unique name for 'NameOfYourBP_[number]' in level 'yourPathLevel:PersistentLevel''
More information:
Warning LogAssetRegistry ScanPathsSynchronous: Package ..../BP_Procedural does not exist, will not scan.
Warning LogOutputDevice Script Stack (0 frames) :
Error LogWindows appError called: Assertion failed: !ActorsByGuid.Contains(ActorDesc->GetGuid()) [File:E:\UnrealEngine\Engine\Source\Runtime\Engine\Private\WorldPartition\ActorDescList.cpp] [Line: 50]
Error LogWindows Duplicated actor descriptor guid 'EA5451512D4A1040834D7F6BA800EDD2' detected: `BP_Procedural_C`
This makes me think that there is a desync since the 2 constructs occur at the same time in the same way.
There is no time to generate the objects with the components at the same time that the two BPs call the construct.
The problem is that in the parent (BP_Modular) I removed all the execution pins from the nodes. I hit compile (to debug step by step) and it seems to crash in the same way and with the same error. That makes me think that there is an “intermediate” that stores a reference somewhere (precompiled) in some way that tells it that that BP still has references and when it executes them it breaks in the same way with the same error.
The solution I found is:
For each child BP_Procedural_child remove the BP_Modular_child. Then you can compile the BP_Modular.
If you have 30 children it becomes too annoying.
I have to say that it does work. But if you have to modify the parent BP_Modular to compile, each child BP_Procedural_Child, you have to remove the BP_Modular_Child. Then it lets you compile (in case you have made a modification). If you don’t have to compile anything, it works fine. But it is rare that something is not going to be modified.
Is there any way to compile the BP_Modular (parent) and not crash the editor with the message I posted above? or is it simply not possible?
I have tried:
1 - Timers (They are useless)
2 - Disable all pins (It is useless)