Das Interchange-Framework ist das Import- und Export-Framework der Unreal Engine. Es ist dateiformatunabhängig, asynchron, anpassbar und kann zur Laufzeit verwendet werden.
Interchange-Import-Interface
Interchange verwendet eine Codebasis, die erweiterbar ist und einen anpassbaren Pipeline-Stapel bereitstellt. Das gibt Ihnen die Freiheit, die Import-Pipeline mit C++, Blueprint oder Python zu bearbeiten, um sie an die Anforderungen Ihres Projekts anzupassen.
Wichtige Konzepte und Begriffe
Bei der Verwendung von Interchange sind die folgenden Konzepte und Begriffe wichtig:
- Pipeline: Eine Sammlung von Operationen, die importierte Daten verarbeiten. Eine Pipeline stellt Optionen zum Personalisieren des Importvorgangs bereit.
- Pipeline-Stapel: Eine geordnete Liste von Pipelines, die eine importierte Datei verarbeiten. Pipelines werden im Stapel zusammengefasst und bestimmten Dateiformaten zugewiesen. Die Pipeline-Stapel finden Sie unter Projekt-Einstellungen > Interchange.
- Factory: Eine Operation, die das Asset aus den importierten Daten erstellt.
Interchange-Plugins aktivieren
Das Interchange-Framework erfordert die PluginsInterchange Editor und Interchange Framework, die standardmäßig aktiviert sind. Wenn diese Plugins in Ihrem Projekt nicht aktiviert sind, können Sie diese in den Projekt-Einstellungen Ihres Projekts aktivieren.
Mehr Informationen zur Aktivierung von Plugins finden Sie unter Arbeiten mit Plugins.
Asset importieren
Assets können in die Unreal Engine über verschiedene Methoden importiert werden.
Sie können Assets in der Inhalts-Schublade oder im Inhaltsbrowser importieren, oder indem Sie Datei > Import Into Level auswählen.
Mehr Informationen zum Importieren von Dateien finden Sie unter Direktes Importieren von Assets.
Import Into Level funktioniert aktuell nur mit glTF- und MaterialX-Dateiformaten.
Importvorgang
Beginnen Sie den Importvorgang mithilfe einer der oben aufgeführten Methoden. Dadurch wird das Fenster Interchange Pipeline Configuration geöffnet.
- Öffnen Sie die Dropdown-Liste Choose Pipeline Stack und wählen Sie den zu verwendenden Pipeline-Stapel aus der Liste.
- Konfigurieren Sie Ihre Einstellungen.
- Klicken Sie auf Importieren, um den Vorgang abzuschließen.
Wählen Sie über das Interface Ihre Import-Einstellungen und klicken Sie auf Importieren, um fortzufahren.
Bei jedem Import prüft die Engine, ob das Dateiformat vom Interchange-Framework unterstützt wird. Wenn die Datei unterstützt wird, verwendet Interchange den entsprechenden Import-Pipeline-Stapel für Ihr Format.
Interchange durchläuft anschließend den folgenden Prozess:
- Interchange konvertiert die importierten Daten in eine Zwischenknotenstruktur in der Unreal Engine.
- Interchange-Daten werden durch den Pipeline-Stapel verarbeitet und folgen den Anweisungen für den Import.
- Verwendet Factorys, um aus dem Ergebnis das Asset zu generieren.
Wenn das Dateiformat nicht von Interchange unterstützt wird, verwendet die Unreal Engine das alte Framework, um die Datei zu importieren.
Das Fenster „Interchange Pipeline Configuration“ hat folgende Optionen:
| Option | Beschreibung |
|---|---|
| Grundlayout | Filtert die Import-Pipeline-Optionen bis auf grundlegende Pipeline-Eigenschaften. |
| Nach Inhalten filtern | Filtert die Import-Pipeline-Optionen basierend auf den in der Quelldatei gefundenen Daten. |
| Pipeline-Stapel auswählen | Wählt den Pipeline-Stapel, der für diesen Import verwendet wird. |
Die Unterstützung für das FBX-Dateiformat ist derzeit Experimentell. Um den FBX-Import mit Interchange zu aktivieren, verwenden Sie die folgenden Konsolenbefehle:
| Konsolenbefehl | Beschreibung |
|---|---|
| Interchange.FeatureFlags.Import.FBX | Schaltet die experimentelle Unterstützung für den FBX-Import mit Interchange um. |
| Interchange.FeatureFlags. importieren.FBX.ToLevel | Schaltet die experimentelle Unterstützung für FBX Import Into Level um. |
Interchange-Vorschau
Wenn Sie auf Vorschau im Fenster „Interchange Pipeline Configuration“ klicken, öffnet sich das Fenster „Interchange Preview Editor“:
Das Fenster Interchange-Vorschau zeigt eine Liste von Assets, die erstellt werden.
In diesem Fenster sehen Sie:
- Eine Liste von Assets, die erstellt werden.
- Ihre Typen als Symbole oder im Tooltip-Text (Materialien, Statisches Mesh, texture2D).
- Ihre Eigenschaften werden durch den Vor-Import-Schritt der Pipeline eingerichtet.
Konfliktvorschau
Wenn der Importvorgang Änderungen an der Material- oder Skelett-Struktur eines reimportierten Asset feststellt, wird die betroffene Pipeline hervorgehoben. Wenn Sie auf Konflikt anzeigen klicken, öffnet sich das Konfliktvorschau-Fenster:
Das Fenster „Interchange Konfliktvorschau“ zeigt Änderungen an der Material- oder Skelett-Struktur beim Reimportieren.
Dieses Fenster hebt jeden Konflikt hervor, um Sie darüber zu informieren, was sich beim Reimportieren des Assets ändert.
In früheren Versionen konnten Sie im Konflikt-Fenster wählen, ob Sie die ursprüngliche Materialzuweisung beibehalten oder ersetzen möchten. Das ist mit Interchange nicht mehr möglich. Um das zugewiesene Material eines Assets zu ändern, müssen Sie die Korrektur in der Quelle vornehmen oder den Statisches-Mesh-Editor verwenden. Mehr Informationen zur Verwendung des Statisches-Mesh-Editors finden Sie unter Anwenden eines Materials mit dem Statisches-Mesh-Editor.
Reimportieren von Assets mit Interchange
Wenn Sie ein Asset reimportieren, das zuvor mit Interchange importiert wurde, merkt sich die Unreal Engine den Pipeline-Stapel und die verwendeten Optionen und zeigt diese Optionen an.
Ein Asset mit Blueprint importieren
Sie können Blueprint verwenden, um Assets durch das Interchange-Framework in die Unreal Engine zu importieren.
Das Blueprint-Beispiel erstellt ein Objekt, das während der Laufzeit Dateien mittels Interchange importiert.
Beispielsweise können Sie Blueprint verwenden, um Dateien mit Interchange zur Laufzeit in einer Unreal-Engine-basierten Anwendung zu importieren. Das obige Beispiel erstellt eine Funktion, die eine Texturdatei an einen bestimmten Pipeline-Stapel importiert. Dafür wird der standardmäßige Textur-Pipeline-Stapel verwendet. Diese Importmethode unterstützt aktuell keine Skelett-Mesh- oder Animationsdaten.
Neue Blueprint-Klasse erstellen
Befolgen Sie diese Schritte, um das Beispiel selbst zu erstellen:
- Erstellen Sie in Ihrem Projekt eine neue Actor-Blueprint-Klasse, welche die Funktion enthält. Um den Actor-Blueprint zu erstellen, rechtsklicken Sie im Inhaltsbrowser, navigieren Sie zum Kontextmenü und wählen Sie Blueprint-Klasse.
-
Wählen Sie im Fenster Pick Parent Class den Actor aus und nennen Sie die neue Blueprint-Klasse InterchangeActor.
Wählen Sie die Parent-Klasse Ihres neuen Blueprints.
Funktion hinzufügen
So fügen Sie eine Funktion hinzu:
- Doppelklicken Sie auf den neuen Blueprint, um den Editor zu öffnen.
-
Gehen Sie im Mein Blueprint- Panel zur Einstellung „Functions“, klicken Sie auf die Schaltfläche + und nennen Sie die neue Funktion InterchangeImport.
Neue Funktion erstellen
Knoten hinzufügen und verbinden
So fügen Sie Knoten hinzu und verbinden diese:
- Fügen Sie einen Sequenz- Knoten hinzu und verbinden Sie ihn mit dem Output der Funktion.
- Verbinden Sie den Then 0-Output und erstellen Sie einen Create Source Data- Knoten, um auf die bestehende Datei zu verweisen, die importiert wird.
- Verbinden Sie den In File Name-Input mit Create Source Data und wählen Sie im Kontextmenü Beförderung zu Variable aus.
- Nennen Sie die neue String-Variable FilePath. Enthält den Speicherort der Datei, die importiert wird.
- Wählen Sie im Blueprint die neue Variable und klicken Sie auf das Kontrollkästchen für Instance Editable.
- Befördern Sie den Output des Create Source Data-Knotens zu einer neuen Variable namens SourceData.
- Ziehen Sie eine Verbindung vom Then 1-Output der Sequenz und erstellen Sie einen Get Interchange Manager Scripted-Knoten. Dadurch wird ein Zeiger für den Interchange Manager erstellt, der im nächsten Schritt verwendet wird.
- Ziehen Sie eine Verbindung vom Get Interchange Manager Scripted-Output und erstellen Sie einen Import Asset-Knoten. Verbinden Sie den Ergebniswert von Get Interchange Manager Scripted mit dem Target-Input auf Import Asset.
- Ziehen Sie den Content Path-Input und befördern Sie ihn in eine neue Variable namens SavePath. Enthält den Speicherort der neu importierten Datei.
- Wählen Sie im Blueprint die neue Variable und aktivieren Sie das Kontrollkästchen bei Instance Editable.
- Holen Sie sich eine Referenz zur Source Data- Variable und verbinden Sie diese mit dem Source Data-Input auf Import Asset.
-
Ziehen Sie eine Verbindung vom Import Asset Parameters-Input und erstellen Sie einen Make Input Asset Parameters-Knoten.
Bild für Großansicht anklicken.
Funktion zur Laufzeit verfügbar machen
So machen Sie die Funktion zur Laufzeit verfügbar:
- Klicken in My Blueprints auf die Funktion InterchangeImport und danach auf das Kontrollkästchen neben Call in Editor im Details-Panel. Diese Option macht die Funktion in den Details des InterchangeActor-Objekts zur Laufzeit verfügbar.
- Speichern und Kompilieren Sie Ihren Blueprint.
Ihren neuen Blueprint verwenden
- Ziehen Sie eine Kopie des InterchangeActor-Blueprints in das Level.
- Klicken Sie auf Spielen.
- Wählen Sie im Outliner den InterchangeActor.
- Füllen Sie im Details-Panel den FilePath und den SavePath aus.
- Klicken Sie auf Interchange Import, um Ihre Datei zu importieren.
Wenn Sie einen Import Scene- Knoten mit dem obigen Blueprint-Beispiel verwenden, spawnt das Asset direkt in der Szene.
Interchange in einer gecookten Anwendung verwenden
Wenn Sie das Interchange-Framework zur Laufzeit in einer gecookten Anwendung verwenden möchten, gehen Sie zu Projekt-Einstellungen > Projekt - Packating > Zusätzliche zu cookende Asset-Verzeichnisse und fügen Sie den Ordner Interchange hinzu.
Bild für Großansicht anklicken.
Asset mit Python importieren
Sie können ein Python-Script verwenden, um Assets durch das Interchange-Framework in die Unreal Engine zu importieren.
import unreal
import_path = "C:/Users/foo/Downloads/Fbx/SkeletalMesh/Animations/Equilibre.fbx"
import_extension = unreal.Paths.get_extension(import_path, False)
is_gltf = import_extension == 'glb' or import_extension == 'gltf'
is_fbx = import_extension == 'fbx'
#wenn eine fbx-datei importiert werden soll, sicherstellen, dass interchange fbx import aktiviert ist
if is_fbx:
level_editor_subsystem = unreal.get_editor_subsystem(unreal.LevelEditorSubsystem)
unreal.SystemLibrary.execute_console_command(level_editor_subsystem.get_world(), 'Interchange.FeatureFlags.Import.FBX true')
editor_asset_subsystem = unreal.get_editor_subsystem(unreal.EditorAssetSubsystem)
transient_path = "/Interchange/Pipelines/Transient/"
transient_pipeline_path = transient_path + "MyAutomationPipeline"
editor_asset_subsystem.delete_directory(transient_path)
#Dupliziere die Standard-Inhaltspipeline für austauschbare Assets, gltf hat spezielle Assets
if is_gltf:
pipeline = editor_asset_subsystem.duplicate_asset("/Interchange/Pipelines/DefaultGLTFAssetsPipeline", transient_pipeline_path)
else:
pipeline = editor_asset_subsystem.duplicate_asset("/Interchange/Pipelines/DefaultAssetsPipeline", transient_pipeline_path)
#Stellen Sie hier alle Pipeline-Eigenschaften ein, die Sie für Ihren Asset-Import benötigen
#erzwinge den Import von statischem Mesh
pipeline.common_meshes_properties.force_all_mesh_as_type = unreal.InterchangeForceMeshType.IFMT_STATIC_MESH
#Statisches Mesh kombinieren
pipeline.mesh_pipeline.combine_static_meshes = True
# Material-Import verhindern
pipeline.material_pipeline.import_materials = False
#Textur-Import verhindern
pipeline.material_pipeline.texture_pipeline.import_textures = False
#Quell-Daten aus dem Dateinamen erstellen
source_data = unreal.InterchangeManager.create_source_data(import_path)
#Parameter für den Interchange-Import erstellen
import_asset_parameters = unreal.ImportAssetParameters()
#Script ist normalerweise ein automatisierter Import
import_asset_parameters.is_automated = True
#Konfigurierte Pipeline zu den Import-Argumenten hinzufügen
import_asset_parameters.override_pipelines.append(unreal.SoftObjectPath(transient_pipeline_path + ".MyAutomationPipeline"))
#gltf-Importeur verwendet 2 Pipelines, füge die zweite hinzu
if is_gltf:
import_asset_parameters.override_pipelines.append(unreal.SoftObjectPath("/Interchange/Pipelines/DefaultGLTFPipeline"))
interchange_manager = unreal.InterchangeManager.get_interchange_manager_scripted()
#Asset importieren
interchange_manager.import_asset("/game/AA0A/testpython/",source_data,import_asset_parameters)
editor_asset_subsystem.delete_directory(transient_path)
Im obigen Beispiel wird ein Python-Script verwendet, um die Datei Equilibre.fbx zu importieren. Das Script prüft, ob das Dateiformat .gltf oder .fbx ist, und weist dann die richtige Pipeline zu.
Pipeline-Stapel bearbeiten
Einer der Vorteile des Interchange-Frameworks ist die Möglichkeit, den Pipeline-Stapel auszuwählen und zu personalisieren, einen anpassbaren Stapel von Prozessen, mit denen die Asset-Daten verarbeitet werden. Sie können Pipelines zum Standard-Pipeline-Stapel hinzufügen, um während des Importvorgangs Verhaltensweisen hinzuzufügen.
Die Unreal Engine wird mit den folgenden Standard-Pipelines ausgeliefert:
- Standard-Asset-Pipeline
- Standard-Material-Pipeline
- Standard-Textur-Pipeline
- Standard-Szenen-Asset-Pipeline
- Standard-Szenen-Level-Pipeline
- Standard-Diagramm-Inspector-Pipeline
Jede Standard-Pipeline enthält die am häufigsten verwendeten Optionen für diese Art des Imports. Sie können diese Pipelines personalisieren, um die spezifischen Anforderungen Ihres Projekts zu erfüllen.
Eine bestehende Pipeline bearbeiten
Jede der Standard-Pipelines kann angepasst werden, um die Anforderungen Ihres Projekts und Teams zu erfüllen.
Im Folgenden finden Sie Methoden zur Anpassung der Import-Optionen für Ihr Projekt:
- Bestehenden Pipeline-Stapel in Ihren Projekt-Einstellungen hinzufügen, entfernen oder neu anordnen.
- Ändern, welche Pipelines standardmäßig verwendet werden.
- Bestehende Standard-Pipelines anpassen.
- Eine benutzerdefiniert Pipeline erstellen.
Projekt-Einstellungen bearbeiten
Sie finden den Pipeline-Stapel in den Projekt-Einstellungen unter Engine > Interchange:
Der Pipeline-Stapel in den Projekt-Einstellungen.
Der Pipeline-Stapel enthält die Standardeinstellungen für:
- Inhalt importieren
- In Level importieren
- Editor-Interface
- Generisch
- Editor Generische Pipeline-Klasse
Inhalt importieren
Die Unreal Engine verwendet diese Einstellungen, um Inhalte in die Inhalts-Schublade oder den Inhaltsbrowser zu importieren.
Bild für Großansicht anklicken.
Sie können die Einstellungen für jeden aufgeführten Inhaltstyp anpassen. Sie können bei Bedarf auch weitere Überschriften hinzufügen. Beispielsweise enthält die Standardkonfiguration Assets, Materialien und Texturen. Sie können eine zusätzlichen Sektion zum Pipeline-Stapel für Animationen hinzufügen und dieser dann eine oder mehr benutzerdefinierte Pipelines hinzufügen, um eingehende Animationsdateien zu verarbeiten.
In Level importieren
Im Editor-Fenster finden Sie Datei > Import Into Level. Standardmäßig verwendet diese Funktion zwei Pipelines, die zusammenarbeiten. Diese Pipelines importieren die Actor-Daten aus einer Datei und spawnen dann einen Actor im Level. Die Import-Funktion verwendet die folgenden Einstellungen:
Bild für Großansicht anklicken.
- DefaultSceneAssetPipeline basiert auf der gleichen Klasse wie DefaultAssetPipeline und ist für den Szenenimport entworfen.
- DefaultSceneLevelPipeline erstellt den Actor in der Welt, nachdem die Daten die DefaultSceneAssetPipeline durchlaufen haben.
Bestehende Standard-Pipelines anpassen
Sie können die Eigenschaften der standardmäßigen Interchange-Pipelines anpassen, um Folgendes zu ändern:
- Standardwerte
- Sichtbarkeit
- Schreibgeschützter Status
Das Details-Panel der Interchange-Pipeline.
Befolgen Sie diese Schritte, um die Einstellungen der standardmäßigen Interchange-Pipelines zu ändern:
- Suchen Sie die Standard-Pipelines in der Inhalts-Schublade oder im Inhaltsbrowser und Doppelklicken Sie auf eine, um sie zu öffnen. Die Pipelines befinden sich im Ordner Engine > Plugins >Interchange Framework Content > Pipelines. Sollten Sie den Engine-Ordner nicht sehen, klicken in der rechten oberen Ecke der Inhalts-Schublade oder des Inhaltsbrowser auf Einstellungen und aktivieren Sie dann das Kontrollkästchen von Engine-Inhalt anzeigen.
- Bearbeiten Sie Folgendes nach Bedarf:
- Sichtbarkeit während des Import- und Reimportvorgangs.
- Standardeinstellung.
- Ob die Eigenschaft während des Importvorgangs schreibgeschützt sein soll.
- Speichern und schließen Sie das Fenster.
Benutzerdefinierte Pipeline erstellen
Sie können neue Interchange-Pipelines erstellen, um den Importvorgang mithilfe von Blueprints, C++ oder Python weiter anzupassen.
Benutzerdefinierte Pipeline mit Blueprints erstellen
Befolgen Sie diese Schritte, um eine neue Interchange-Pipeline mit Blueprints zu erstellen:
- Klicken Sie mit der rechten Maustaste in der Inhalts-Schublade oder im Inhaltsbrowser und wählen Sie Create Blueprint Class.
- Klappen Sie im Fenster Pick Parent Class die Kategorie Alle Klassen auf und wählen Sie InterchangePipelineBase als seine Parent-Klasse.
- Doppelklicken Sie auf den neuen Blueprint, um den Blueprint-Editor zu öffnen.
Wählen Sie InterchangePipelineBase als die Parent-Klasse.
Eine mit Blueprints erstellte benutzerdefinierte Pipeline besitzt folgende Funktionen, die überschrieben werden können, um benutzerdefiniertes Verhalten hinzuzufügen.
Interchange Blueprint Überschreibungsfunktionen.
| Überschreibungsfunktion | Beschreibung |
|---|---|
| Scripted Can Execute on Any Thread | Teilt dem Interchange Manager mit, dass diese Pipeline im asynchron Modus ausgeführt werden kann. |
| Scripted Execute Export Pipeline | Wird während des Exportvorgangs ausgeführt (Funktion ist derzeit nicht funktionsfähig). |
| Scripted Execute Pipeline | Wird nach der Dateiverschiebung ausgeführt. Erstellt die zum Generieren von Assets benötigte Factory. |
| Scripted Execute Post Factory Pipeline | Wird ausgeführt, nachdem die Factory ein Asset erstellt hat, aber bevor die PostEditChange-Funktion abgerufen wird. |
| Scripted Execute Post Import Pipeline | Wird ausgeführt, nachdem das Asset vollständig importiert und die PostEditChange-Funktion aufgerufen wurde. |
| Scripted Set Reimport Source Index | Wird ausgeführt und sagt der Pipeline, welcher Quell-Index reimportiert werden soll. Verwenden Sie diese Funktion, wenn Sie ein Asset reimportieren, das mehr als eine Quelle haben kann. Beispielsweise ist ein Skelett-Mesh mit einer Quelldatei für die Geometrie und einer anderen für die Skinning-Informationen möglich. |
Benutzerdefinierte Pipeline mit C++ erstellen
Zum Erstellen einer neuen Interchange-Pipeline mit C++, legen Sie eine Header-Datei an, die Folgendes enthält:
#pragma once
#include "CoreMinimal.h"
#include "InterchangePipelineBase.h"
#include "InterchangeSourceData.h"
#include "Nodes/InterchangeBaseNodeContainer.h"
#include "InterchangeMyPipeline.generated.h"
UCLASS(BlueprintType)
class INTERCHANGEPIPELINES_API UInterchangeMyPipeline : public UInterchangePipelineBase
{
GENERATED_BODY()
protected:
virtual void ExecutePipeline(UInterchangeBaseNodeContainer* BaseNodeContainer, const TArray<UInterchangeSourceData*>& SourceDatas) override;
virtual bool CanExecuteOnAnyThread(EInterchangePipelineTask PipelineTask) override
{
return true;
}
};
erstellen als Nächstes eine Quelldatei, die Folgendes enthält:
#include "InterchangeMyPipeline.h"
void UInterchangeMyPipeline::ExecutePipeline(UInterchangeBaseNodeContainer* NodeContainer, const TArray<UInterchangeSourceData*>& InSourceDatas)
{
Super::ExecutePipeline(NodeContainer, InSourceDatas);
// Fügen Sie die benötigte Logik entweder auf verschobenen Knoten oder auf Factory-Knoten hinzu
}
Mehr Informationen zur Arbeit mit C++ in der Unreal Engine finden Sie unter Programmieren mit C++.
Benutzerdefinierte Pipeline mit Python erstellen
Zum Erstellen einer neuen Interchange-Pipeline mit einem Python-Script, legen Sie ein neues Python-Script an und verwenden Sie die Projekt-Einstellungen, um es zu den Start-Scripts hinzuzufügen. Mehr Informationen zur Arbeit mit Python-Scripting in der Unreal Engine finden Sie unter Scripting im Unreal Editor mit Python.
Im folgenden Beispiel-Script wird Python-Script verwendet, um eine Basis-Asset-Import-Pipeline zu erstellen.
import unreal
@unreal.uclass()
class PythonPipelineTest(unreal.InterchangePythonPipelineBase):
import_static_meshes = unreal.uproperty(bool,meta=dict(Category="StaticMesh"))
import_skeletal_meshes = unreal.uproperty(bool,meta=dict(Category="SkeletalMesh"))
def cast(self, object_to_cast, object_class):
try:
return object_class.cast(object_to_cast)
except:
return None
def recursive_set_node_properties(self, base_node_container, node_unique_id):
node = base_node_container.get_node(node_unique_id)
# Legen Sie den Aktivierenzustand für den Statisches-Mesh-Factory-Knoten fest
static_mesh_node = self.cast(node, unreal.InterchangeStaticMeshFactoryNode)
if static_mesh_node:
static_mesh_node.set_enabled(self.import_static_meshes)
# Legen Sie den Aktivierenzustand für den Skelett-Mesh-Factory-Knoten fest
skeletal_mesh_node = self.cast(node, unreal.InterchangeSkeletalMeshFactoryNode)
if skeletal_mesh_node:
skeletal_mesh_node.set_enabled(self.import_static_meshes)
# Children iterieren
childrens = base_node_container.get_node_children_uids(node.get_unique_id())
for child_uid in childrens:
self.recursive_set_node_properties(base_node_container, child_uid)
@unreal.ufunction(override=True)
def scripted_execute_pipeline(self, base_node_container, SourceDatas):
root_nodes = base_node_container.get_roots()
for node_unique_id in root_nodes:
self.recursive_set_node_properties(base_node_container, node_unique_id)
return True