Hi Martin,
Thanks for the updated information.
This is indeed a Mass lifecycle edge case, and your diagnosis is correct. The issue comes from a timing mismatch between structural events and phase-bound processors. Observer processors are structural and exist before phases begin, while signal processors are phase-driven and only exist once the simulation phases start. As a result, if a subsystem spawns Mass entities in OnWorldBeginPlay and an observer sends a signal at that time, the signal being dropped could be expected.
It appears you’ve found a workaround, and if it meets your needs, that is perfectly fine. It is up to you to make a signal processor with observer-timing, or have an observer processor that could receive signals, or have two processors for the same timing with different purposes. However, since there is limited context regarding the motivation behind this setup, I’d like to suggest a few Epic-style approaches for handling this scenario more robustly.
Rather than relying on signals from observers, it helps to first consider:
What the signal semantically represents (e.g., initialization, registration, or gameplay logic).
Which phase of the Mass simulation is intended to run in?
Since Mass is a data-oriented framework, the most “Mass-native” solution in this case would be to use a tag-based approach—for example, adding an FNeedsInitTag and handling it with a processor. This follows typical data-oriented design by separating structural setup from runtime behavior and handing off work via data rather than events.
Signals are best reserved for one-shot, runtime gameplay events. They are not intended to be a general notification mechanism and should not be relied upon for structural or initialization logic.
Additional options you may consider include:
Delaying entity spawning until the Mass simulation has started. If spawning in OnWorldBeginPlay is not strictly required, entities could be queued and spawned after the first phase begins.
Manually buffering signals by storing entities in a subsystem and flushing those signals once phases are active. This is rare, but it may be good for certain requirements.
If you can provide more details about the specific use case and the intent behind this flow, a clearer understanding of the use case would assist us in evaluating the best approach.
Best regards,
Henry Liu
[Attachment Removed]