IElement

IElement is an interface that have one function : GetElementID.
Once an element(object) implement this interface, it won’t need to give the ElementID when serializing it.

Remote Serialization.
There is nodes like SerializeArchive, deserializeInstance…etc that will serialize Elements from outside the blueprint of these elements. Only IElement can have this working, and they need to be registered in an archive (at BeginPlay and construction script).

– Go in edit class settings.
– Add the interface : “DtAIElement”.
– Open the new interface function GetElementID
– Drag out the elementID pin on the left (input), search “set” and add the node SetElementID.
This mode was aspecialy made for this use, it allow DtArchives to Get or Set your identifier.
– Drag out the ElementID pin of this new node and “promote to variable”.
– Connect this new var to the ElementID output of the function.
– Then connect both free pins to the exec output.
– Make the ElementID “Instance Editable”
You can see how it was done in BP_LightSwitch_A2.

– Add a RegisterElement node in the construction sript.
An IElement need to be registered in construction script :
– You’ll see it in the ArchivesMaster.
– His state is update by the archive and you directly see if it is validated or not.

An IElement must be registered at begin play for remote serialization.

-Open BP_Door_Red_A2 and reparent it to Actor_DTAe (e is for element, it already implement IElement).
Now both doors blueprint are implementing IElement and have a public instance editable ElementID.
Once both are “validated ElementID” (go out of Edition Mode), they can be serialized without giving an identifier, they can too be serialized from the archiveMaster (Serialize All) or from any general nodes like serializeArchive and you can see them in ArchiveSettings (Master).
EditionMode can be used for unactivate a particular Element, if set to true, element won’t be saved or loaded.
If you open the element setting, there is a “No Remote” boolean, if true, this element won’t be (de)serialized from a general node (serialiseArchive, deserializeInstance etc…) but can still be (de)serialised by a (De)SerializeObject node.