Freigeben über


Visual Scripting-Programmierhandbuch für Gitter

Wechseln Sie zum Übersichtsartikel " Visual Scripting"

Begrenzungen

  • Nur eine Teilmenge der Unity-Funktionalität wird für visuelle Skripts verfügbar gemacht.
  • Variablen und Eigenschaften mit nicht einfachen Typen (einschließlich Objektverweise) werden nicht automatisch freigegeben. Weitere Informationen hierzu finden Sie weiter unten unter "Freigabe und Netzwerk ".

Hello World

Das einfachste visuelle Skript, das Sie erstellen können, ist ein Skript, das einfach ein Meldungsfeld öffnet:

Screenshot des visuellen Skriptdiagramms des beispiels Hallo Welt

So sieht es in Mesh aus:

Gitterbrowserfenster mit einem Popupdialogfeld, in dem Hallo Welt und eine Schaltfläche

Screenshot des Unity-Editors mit geöffneter visueller Gitterskripterstellung Hallo Welt Szene.

Testen ihrer Skripts

Bevor Sie Ihre Szene in Mesh hochladen, können Sie visuelle Skripts entwickeln und testen, auch mit mehreren Clients im Geteilten Bildschirmmodus, mithilfe des Wiedergabemodus mit Gitteremulation.

Visuelle Skriptdiagnose im Editor

Wenn ein GameObject mit einem Skriptcomputer in der Transformationshierarchie ausgewählt ist, zeigt Mesh den Bereich "Mesh Visual Scripting Diagnostics " am unteren Rand des Inspektorbereichs an:

Screenshot des Diagnosebereichs

Der Diagnosebereich gibt sofortiges Feedback zu Warnungen oder Fehlern, die verhindern können, dass Ihre Skripts in Mesh gut funktionieren.

Aktuelle Einschränkung: Zukünftige Versionen des Diagnosebereichs können auch Einblicke in die Verwendung freigegebener Variablen und Eigenschaften des visuellen Skripts geben und zusätzliche Diagnosen und Warnungen anzeigen.

Hochladen in Gitter

Verwenden Sie den Gitteruploader , um Szenen hochzuladen, die visuelle Skripts enthalten. Um den Uploader zu öffnen, wählen Sie im Menü "Mesh Toolkit" die Option "Umgebungen" aus.

Hinweis: Der Mesh Uploader überprüft visuelle Skripts vor dem Hochladen und lehnt das Hochladen ab, wenn in visuellen Skripts Überprüfungsfehler auftreten. Detaillierte Diagnosen werden in der Konsole ausgegeben.

Freigabe und Netzwerk

Freigegebener und lokaler Skriptstatus

Mesh verwendet Unity Visual Scripting, das ohne Netzwerk funktionieren soll. Visuelle Skripts werden auf jedem Client unabhängig ausgeführt. Die Gittererfahrung der Benutzer wird jedoch geteilt; Alle Benutzer erleben eine einzelne freigegebene Szene, die auf allen Clients gleich aussieht.

Der Effekt der Ausführung eines visuellen Skripts ist, wie er den Zustand der Szene ändert.

Standardmäßig repliziert Mesh szenenänderungen, die von visuellen Skripts auf einem Client auf allen anderen Clients vorgenommen werden. Abgesehen von allem, was in einer Szene geteilt wird, bleibt ein Zustand unabhängig von jedem Client (also lokal).

Lokale Änderungen haben vorübergehend Vorrang vor Änderungen, die von Clients stammen. Beispiel: Wenn Sie ein Objekt lokal animieren, wird ihre lokale Animation nicht durch Änderungen von anderen Clients beeinträchtigt.

Es gibt einige einschränkungen bei der automatischen Aktualisierungsrate. Ein Client sendet keine zusätzlichen Updates, während ein Kunde noch im Test-Flight ist. es gibt ein Update, das pro Roundtrip über den Server gesendet wird. Dies beträgt etwa fünf bis sechs Updates pro Sekunde in praktischen Situationen. Dies bedeutet, dass eine reibungslose Animation, die von einem Client gesteuert wird, auf anderen Clients nicht reibungslos aussieht. Die bewährte Methode besteht darin, reibungslose Animationen lokal zu erledigen, idealerweise nicht durch visuelle Skripts, sondern über das normale Unity-Animationssystem.

Die letztendliche Konsistenz des freigegebenen Zustands ist gewährleistet (auch wenn die Zustände von Clients vorübergehend unterschiedlich sein können).

Lokaler Zustand:

  • Natürlicher lokaler Zustand – Sounds, UI, Rendering.
  • Vom Benutzer gesteuerter lokaler Zustand – Teilszenen, die mit der Komponente " Lokaler Skriptbereich" gekennzeichnet sind.
  • Technischer lokaler Zustand – Objekte, die nicht Teil der Szenenhierarchie sind (z. B. Renderermaterialien, Ressourcen).

Freigegebener Zustand:

  • Beschränkt auf visuelle Skriptvariablen und die Eigenschaften von GameObjects und Szenenkomponenten, die Teil der Szenenhierarchie sind.
  • Es können nur Variablen und Eigenschaften einfacher Typen repliziert werden: Ganze Zahlen, Gleitkommazahlen, Booleanen, Zeichenfolgen, Color, ,3/Vector2/4 , Quaternion, Matrix4x4und .Rect

Jede Änderung des freigegebenen Zustands wird über das Netzwerk gesendet. Dies erhöht den Netzwerkdatenverkehr und kann, wenn sie achtlos verwendet wird, erhebliche Bandbreite verbrauchen.

Freigegebene und lokale Skripttrigger

Alle visuellen Skriptflüsse beginnen als Reaktion auf ein Ereignis.

  • Wenn das Ereignis auf einem einzelnen Client stammt (z. B. klickt der Benutzer auf eine Schaltfläche), wird das visuelle Skript nur auf diesem Client ausgeführt.
  • Wenn das Ereignis auf allen Clients auftritt, wird das visuelle Skript auf allen Clients ausgeführt (z. B. Timerereignis, Änderung der freigegebenen Eigenschaft, Aktualisierung der freigegebenen Variablen, Avatar wechselt triggern, physische Körpereingaben kollidieren).

Wenn Sie einen Knoten hinzufügen, um zu erkennen, ob ein Objekt ausgewählt ist, ist es wichtig, das richtige auszuwählen. Sie haben zwei Möglichkeiten: Gitterinteraktionsfähiger Textkörper : Ist lokal ausgewählt und interagierbarer Gittertext: Ist ausgewählt. Angenommen, Sie möchten über eine Schaltfläche verfügen, auf die geklickt werden kann, um die Teleportation auszulösen. Damit der Teilnehmer nur auf die Schaltfläche klickt und nur selbst transportiert, verwenden Sie den interagierbaren Gittertext: Ist lokal ausgewählt.

Screenshot des lokalen Knotens

Damit der Teilnehmer auf die Schaltfläche klickt und alle Benutzer in der Oberfläche teleportiert, verwenden Sie den interagierbaren Gittertext: Is Selected node. In jedem Fall weist der Text oberhalb des Knotens das erwartete Verhalten an:

Screenshot des Knotens

Wenn ein lokales Skript eine freigegebene Variable festlegt und ein zweites Skript änderungen an dieser Variablen überwacht (unter Verwendung des Triggers "On State Changed "; siehe unten), wird das zweite Skript auf allen Clients ausgeführt.

Mesh bietet einige spezielle Skriptknoten:

  • Bei Intervalltriggern in regelmäßigen Intervallen synchron auf allen Clients.
  • Beim Ändern des Zustands wird ausgelöst, wenn sich die Eingaben ändern (z. B. freigegebene Eigenschaften, freigegebene Variablen, lokal).
  • Im Dialogfeld anzeigen wird ein Meldungsdialogfeld mit benutzerdefiniertem Text angezeigt, der optional Schaltflächen als Antwortoptionen bereitstellt.

Gitter macht bestimmte Kompromisse zugunsten der Einfachheit:

  • Wenn mehrere Clients versuchen, dieselben Daten zu ändern, gewinnt der letzte Client (anstatt ein transaktionsbasiertes Datenaktualisierungsmodell zu verwenden).
  • Um die Datenkonsistenz sicherzustellen, dürfen visuelle Skripts, die auf allen Clients ausgeführt werden, keine freigegebenen Eigenschaften oder Variablen lesen und dann schreiben. Wenn dies geschieht, löst sie einen Laufzeitfehler aus und bricht die Ausführung des Skriptflusses ab.

Bewährte Methoden

Visuelle Skripts sind wesentlich langsamer als systemeigener C#-Code. Darüber hinaus erweitert Mesh visuelle Skripts mit Netzwerk- und anderen Integrationsfeatures, und scheinbar weniger visuelle Skriptaktionen können zu Netzwerkdatenverkehr führen. Um mehr über die optimale Leistung ihrer visuellen Skripts zu erfahren, empfehlen wir, die folgenden Artikel anzuzeigen:

Übersicht über bewährte Methoden für visual Scripting
Bewährte Methoden für die Visuelle Skripterstellung für die Leistung
Bewährte Methoden für visuelle Skripterstellung für Netzwerke
Bewährte Methoden für das Debuggen von visuellen Skripts

Sicherheit

Mesh schützt Benutzer vor Bedrohungsszenarien wie den folgenden:

  • Kompromittierte Szeneninhalte , z. B. böswillige Versuche, auf vertrauliche lokale Daten zuzugreifen.
  • Kompromittierter Client- oder Transportkanal , z. B. böswillige Versuche, auf Remotedaten auf anderen Clients zu lesen oder zu schreiben.

Um dies zu erreichen, führt Mesh visuelle Skripts in einer Sandbox (z. B. JavaScript in einem Webbrowser) aus.

Beim Szenenstart verwendet Mesh eine kuratierte Zulassungsliste, um visuelle Skripts zu überprüfen, um den Zugriff auf bestimmte Arten von Unity-Komponenten und eine sichere Teilmenge ihrer Eigenschaften zu beschränken.

Zur Szenenlaufzeit beschränkt Mesh den Zugriff auf bestimmte Teile der Szene:

  • Lokal: durch Verhindern des Zugriffs auf interne Gitter und andere vertrauliche Daten.
  • Remote: Indem Sie überprüfen, ob der Autor der Szene diesen Teil der Szene ändern will. Dies geschieht, indem visuelle Skripts auf der Seite des Empfängers für ihre potenziellen Szenenschreibvorgänge statisch analysiert werden.

Beispiele:

  • Ein böswilliges lokales Skript möchte allen Avataren bobble Köpfe geben. Zu diesem Zweck versucht es, die gesamte Szene nach GameObjects zu scannen, die Avatarköpfe darstellen. Gitter filtert automatisch die Scanergebnisse, um das Avatarsystem auszuschließen.
  • Ein böswilliger Remoteclient möchte die Szene durch Kippen aller GameObjects auf den Kopf stellen. Um dies zu erreichen, sendet sie eine Eigenschaftsaktualisierung, die die vertikale Skalierung jedes GameObjects in der Szene festlegt. Da jedoch kein visuelles Skript auf dem empfangenden Client darauf ausgelegt ist, eine ähnliche Aktion auszuführen, ignoriert der lokale Client die Remoteeingabe.

Mesh-Integration

Aktuelle Einschränkung: In diesem Abschnitt wird eine Vorschau der Noch ausgeführten Features beschrieben.

Im Allgemeinen erfolgt die Integration mit anderen Komponenten häufig durch Ändern und Überwachen von Komponenteneigenschaftenänderungen. Zum Beispiel:

  • Interagierbare Eigenschaften: Beobachten Sie die Eigenschaften "Ist zeigen" und "Ist ausgewählt".

  • Physikalische Interaktionen: Beobachten Sie Körper im Triggervolumen oder im Kontakt mit Kollidierung.

  • Avatare: Avatarposition lesen, Drehung anzeigen und Namensplatte anzeigen. (Noch nicht verfügbar.)

  • Sitzungszustand: Teilnehmer auflisten und Teilnehmerinformationen lesen. (Noch nicht verfügbar.)

  • Cloud Scripting: Arbeiten Sie zusammen mit Cloudskripts, die Variablen und Komponenteneigenschaften lesen und schreiben können. (Noch nicht verfügbar.)

Einige Komponenten stellen lokale Aktionen bereit:

  • Audio-Manager
  • Zeitachse
  • Animatoren
  • Rendering: Material- und Shadereigenschaften lesen und schreiben

Die Physik wird speziell behandelt, da die Simulation für ein bestimmtes Physikobjekt immer nur von einem Client autoritativ durchgeführt wird: seinem Besitzer. Damit diese Arbeit funktioniert, löst das Festlegen von Physikeigenschaften eine automatische Besitzübertragung an den Client aus, der die Änderung anwendet.

Nächste Schritte