Blend4Web verfügt über einen sehr guten visuellen Logik-Editor, mit dem Programme entwickelt werden können, ohne Blender verlassen zu müssen. Das ist für Projekte mit geringerer Komplexität völlig ausreichend. Mit JavaScript können Sie jedoch viel mehr machen, indem Sie direkt auf die Engine API zugreifen.
Damit kommen wir zur Frage: Gibt es eine Möglichkeit, die Einfachheit der visuellen Programmierung mit der Leistungsfähigkeit des JavaScript-Codes zu verbinden? Die Entwickler von Blend4Web arbeiten schon seit längerer Zeit an einer derartigen Lösung und sind vor Kurzem auch fertig geworden.
Node-based Logic
Das Hauptelement zum Verbinden der Node Logik mit JavaScript ist der JS Callback Node. Dieser Knoten wird verwendet, um eine bestimmte Funktion aus dem Programmcode heraus aufzurufen und an sie Parameter zu übergeben. Während die Funktion ihre Arbeit ausführt, wartet JS Callback geduldig auf das Ende. Nach Abschluss der Aufgabe gibt die Funktion die Kontrolle an den JS Callback-Node zurück und die logische Knotenkette setzt ihre Arbeit fort.
Schauen wir uns ein einfaches Beispiel für eine solche Interaktion an.
Nehmen wir an, dass unsere Szene ein Objekt enthält, das eine bestimmte Funktion ausführen soll, wenn es ausgewählt ist. Der Code der Funktion erhält auch eine Textnachricht, wie z. B.“Hello World!“… oder vielleicht „Hello Script!
Machen wir zunächst eine logische Kette, die eine Variable erzeugt und überwacht, ob das Objekt ausgewählt ist.
Dies ist ein sehr einfaches und logisches Setup. Zunächst wird das R1-Register initialisiert und der Text „Hello Script! Danach wird das Control an den Knoten Switch Select übergeben, der auf das Objekt Cube wartet. Wenn es ausgewählt ist, wird das Control an den nächsten Knoten übergeben; wenn nicht, wartet der Knoten weiter.
Der nächste Halt ist der JS Callback Node selbst!
Zuerst müssen wir den Namen der Funktion angeben, die der Knoten aufrufen wird. Dies sollte im Feld Callback-ID geschehen. Wenn Sie einige Daten an die Funktion übergeben werden müssen, sollten Sie sie zum Feld Parameter hinzufügen.
Jede Variable belegt einen separaten Slot; Slots können mit der „+“ -Taste hinzugefügt werden. JS Callback kann nicht nur Variablen, sondern auch ganze Szenenobjekte (in Form von Arrays) übergeben. In unserem Fall müssen wir das R1-Register im ersten Steckplatz setzen.
Nehmen wir nun an, dass der JS Callback-Knoten seine Arbeit beendet hat und von der aufgerufenen Funktion eine Ausgabe erhalten hat. Nun, um sicher zu gehen, geben wir den Wert des R1-Registers an die Browser-Konsole aus, indem wir den Node Console Print verwenden.
JavaScript Code
Da für die Interaktion zwischen JavaScript und Node-Logik ein spezifisches Modul benötigt wird, müssen wir dieses Modul zuerst importieren.
Jetzt lasst uns unsere Funktion registrieren. Das sollte vor dem Laden der Szene geschehen:
Wie Sie sehen können, hat er die im JS-Callback-Knoten erwähnte “Node” -Kennung und den Namen der Funktion.
Und hier ist die Funktion selbst:
Es sollte beachtet werden, dass der JS Callback-Node Werte als Array übergibt und empfängt. Die Variable Input[0] enthält hier den Wert des R1-Registers, der in der Browser-Konsole angezeigt wird. Anschließend gibt die Funktion den Ausgang[0] mit einer Textnachricht zurück.
Der JS Callback-Node erhält das Ergebnis, während der nächste Knoten Console Print den Text an die Browser-Konsole ausgibt.
Und hier ist die komplette Liste des Skripts
Vielen Dank für Ihren Besuch.