Freigeben über


Funktionsweise des Equippable Wand

Wand Übersicht

Wichtig

Wenn Sie mit Equippables noch nicht vertraut sind, empfehlen wir, den Artikel mit dem Namen "Hold"-Objekte realistisch mit Equippables zu lesen, bevor Sie diesen Artikel lesen.

The Wand ist eines der Equippables im Toybox-Paket , das Sie erhalten, wenn Sie unsere Mesh-Beispiele von GitHub herunterladen. Wenn Sie den Wand abholen, halten Sie ihn vor Ihnen fast brusthoch, und der Wand zeigt einen funkelnden Dampfpartikeleffekt an seiner Spitze.

GIF, das einen Ereignisteilnehmer anzeigt, der den Wand in seinem nicht aktivierten Zustand hält.

Um den Wand zu aktivieren , klicken Sie auf die linke Maustaste (PC) oder die Controllertriggertaste (Quest). Ihr Arm bewegt sich vorwärts und die Spitze des Wand emittiert Feuerwerkskörper, die durch einen anderen Partikeleffekt erzeugt werden.

GIF, das einen Ereignisteilnehmer zeigt, der den Wand aktiviert, der dann Feuerwerk generiert.

Der Aktivierungstyp des Wands ist auf single festgelegt. Dies bedeutet, dass der Wand deaktiviert und ihr Arm an seine Ausgangsposition zurückkehrt, sobald es durch sein Verhalten läuft. Klicken Sie erneut, um das Verhalten zu wiederholen.

Das Wand-Skriptdiagramm

Sehen wir uns an, wie der Wand funktioniert, indem wir das skriptdiagramm untersuchen, das an ihn angefügt ist.

  1. Öffnen Sie das Beispiel "Toybox", und stellen Sie sicher, dass Sie sich in der Toybox-Szene befinden.

  2. Wählen Sie in der Hierarchie das Wand_Prefab GameObject aus.

    Screenshot der Hierarchie mit hervorgehobenem Wand-Prefab.

  3. Navigieren Sie im Inspector zur Script Machine-Komponente , und beachten Sie, dass sie ein Skriptdiagrammobjekt namens MagicWand enthält. Klicken Sie auf die Schaltfläche "Diagramm bearbeiten".

    Screenshot der Skriptcomputerkomponente der Wand mit hervorgehobener Schaltfläche

Erkennen, wann der Wand abgeholt wird

In dem visuellen Skript, das an den Wand angefügt ist, beginnen wir unsere Analyse in der Knotengruppe mit dem Namen "Check if Held to start magic glow".

Screenshot des vollständigen Skriptdiagramms der Wand mit hervorgehobenem zweiten Abschnitt.

Der Knoten, der bestimmt, ob der Wand aufgenommen wird oder nicht Gitter interagierbarer Körper ist : Is Mine. Es ist ein boolescher Wert und beginnt mit dem Wert "False".

Screenshot des isMine-Knotens.

Wenn ein Avatar den Wand abholt, ändert sich sein Zustand. Der Wert von isMine ändert sich in "true", und dieser Wert wird an einen If-Knoten übergeben. Dies bewirkt, dass ein "Pick-up-Sound" ausgelöst wird ...

Ein Screenshot des zustandsänderten Zustands wurde geändert, wenn und Gitteraudioknoten wiedergegeben werden.

... und ändert auch den Wert der Objektvariable StartGlowVFX auf "true".

Screenshot des Knotens

Beachten Sie, dass der Text oberhalb der Knoten " isMine " und "On State Changed " "Lokal für diesen Client" lautet.

Ein Screenshot der Datei ist meine und auf der Stufe geänderte Knoten, wobei der lokale zu diesem Clienttext hervorgehoben ist.

Diese Knoten und der Sound, der ausgelöst wird, treten lokal auf. Wir möchten jedoch, dass die anderen Teilnehmer im Ereignis erleben, was mit dem Wand passiert. Dies wird durch Einfügen des Knotens "Objektvariable festlegen" erreicht, der den Text "Von allen Clients freigegeben" anzeigt.

Screenshot des Variablenknotens

Tipp: Die isMine-Variable befindet sich im Skript "Mesh Interactable Body" .

Ein Screenshot der Datei ist das boolesche Skript

Aktivieren des nicht aktivierten Zustandspartikeleffekts

Wir nehmen den Fluss in der Knotengruppe mit dem Namen Networking startMagic auf. Der Zweck dieser Knotengruppe besteht darin, den anfänglichen Partikeleffekt zu drehen, der an der Spitze des Wands ein- und ausgeschaltet erscheint. Wir nennen diesen Effekt "Funkendampf".

Screenshot des vollständigen Skriptdiagramms der Wand mit hervorgehobenem fünften Abschnitt.

Die Zustandsänderung bewirkt, dass der Wert "true" von startFLowVFX an einen If-Knoten übergeben wird.

Screenshot der Get-Objektvariable, in der Phase geändert, und wenn Knoten.

... und dies bewirkt, dass der Wert der PersistentVFX-Objektvariable auch "true" ist, wodurch der vfx_wand-ethereal_persistent_02 Partikelsystemeffekt ("Funkdampf") ausgelöst wird.

Screenshot des festgelegten aktiven Knotens mit dem Wert des booleschen Werts, der den Partikeleffekt auf

GIF, das einen Ereignisteilnehmer anzeigt, der den Wand in seinem nicht aktivierten Zustand hält.

Aktivieren des Wands

Angenommen, der Teilnehmer klickt auf die linke Maustaste (PC) oder die Controllertriggertaste (Quest). Dies wird als "Aktivieren der Equippable" bezeichnet. Es bewirkt, dass sich die Armposition des Avatars ändert, und in der Knotengruppe mit dem Namen Networking wirdpressed ...

Screenshot des vollständigen Skriptdiagramms der Wand mit hervorgehobenem vierten Abschnitt.

... der Klick vom interagierbaren Gittertext erkannt wird: Is Activated node. Dieser Knoten ist ein boolescher Wert mit dem Standardwert "false". Der Klick wird auf "true" aktiviert . Der Knoten "Bei Status geändert " übergibt den Wert "true" an den If-Knoten . Dies bewirkt, dass der Knoten "Variable festlegen" den isPressed Boolean auf das Gegenteil dessen festgelegt hat, was es vorher war (also jetzt ist es "true").

Ein Screenshot des aktivierten Knotens und anderer Knoten, die dazu führen, dass sie auf

Tipp: Die isActivated-Variable befindet sich im Skript "Mesh Interactable Body" .

Ein Screenshot der aktivierten Variablen im Skript

Aktivieren des aktivierten Zustandspartikeleffekts

Wir nehmen den Fluss in der Knotengruppe mit dem Namen "Rechtschreibung" beim Klicken auf.

Screenshot des vollständigen Skriptdiagramms der Wand mit hervorgehobenem dritten Abschnitt.

Diese Knotengruppe löst den Feuerwerkspartikeleffekt am Ende des Wands aus, der auftritt, wenn der Teilnehmer auf die Schaltfläche klickt und den Wand aktiviert. Nachdem der Wand in seinen nicht aktivierten Zustand zurückkehrt, dreht diese Knotengruppe den ersten Partikeleffekt ("Funkendampf") wieder ein.

In the graph, the "true" value of isPressed* causes an if node to trigger the Set Variable: Object node. Dieser Knoten legt die startGlowVFX-Variable auf "false" fest.

Screenshot des start glow vfx boolean in false

Dadurch werden die Knoten in der Netzwerkstartmagic-Knotengruppe erneut ausgelöst. Diesmal bewirkt der "false"-Wert von startGlowVFX , dass der PersistentVFX-Partikeleffekt deaktiviert wird.

Ein Screenshot des persistenten vfx-Boolen wurde in

Zurück zur Rechtschreibprüfung, wenn Sie auf Knotengruppe klicken . Nach einer kurzen Abkühlphase wird ein Sound wiedergegeben, und dann wird an der Spitze des Wands ein anderer Partikeleffekt ausgelöst: vfx_wand_blast_trail_spheres_01 ("Feuerwerk"), was der Wert für die ShootTrailVFX-Objektvariable ist.

Screenshot der Knoten, die den aktivierten Zustandssound und den Partikeleffekt auslösen.

GIF, das einen Ereignisteilnehmer zeigt, der den Wand aktiviert, der dann Feuerwerk generiert.

Aktivieren des nicht aktivierten Partikeleffekts wieder

Nach einer weiteren kurzen Cooldown-Periode wird der startGlowVFX Boolesche Wert wieder in "true" geändert, wodurch das vfx_wand_ethereal_persistent_02 Partikelsystem ("Sparkly Vapor") wieder in der Networking startMagic-Gruppe aktiviert wird.

Ein Screenshot der Knoten, die den funkelnden Dampfpartikeleffekt wieder aktivieren.

An diesem Punkt kehrt der Avatar-Arm an die Position zurück, in der es vor der Aktivierung des Wands war, und der funkelnde Dampf kann wieder gesehen werden.

GIF, das einen Ereignisteilnehmer anzeigt, der den Wand in seinem nicht aktivierten Zustand hält.

Lassen Sie den Wand los

Wenn der Wand den Aktivierungstyp "Umschalten" hatte, wenn der Teilnehmer erneut geklickt hat, würde er einen zweiten, anderen "Zustand" oder einen Satz von Verhaltensweisen auslösen. Der Aktivierungstyp des Wands ist jedoch "single", und dies bedeutet, dass jedes Mal, wenn der Teilnehmer klickt, denselben "Zustand" oder einen Satz von Verhaltensweisen wiederholt wird.

Um den Wand freizugeben, drückt der Teilnehmer die LEERTASTE; dies bewirkt, dass der Wand auf den Boden fällt. Wenn der Wand nicht gehalten wird, soll der funkelnde Dampfpartikeleffekt nicht an der Spitze des Wands laufen. Die Knoten in der Gruppe " Wenn nicht belegt" deaktivieren Sie diesen Partikeleffekt.

Screenshot des vollständigen Skriptdiagramms der Wand mit hervorgehobenem ersten Abschnitt.

Während der Wand gehalten wird, ist der Wert des interagierbaren Gitterkörpers: Get Equipped At* ist "DefaultHand". Der Wert des Knotens "Equip Location " (boolescher Wert) lautet "None". Diese beiden Werte werden im Knoten "Gleich " (auch ein boolescher Wert) verglichen. Da sie nicht identisch sind, ist die Ausgabe von Equal "false" und der Wenn-Knoten nicht ausgelöst wird.

Ein Screenshot des

Wenn der Wand abgelegt wird, ändert sich der Wert von "Get Equipped At " in "None". Dies bewirkt, dass die Knoten "Gleich" und "Wenn " "true" ausgeben. Dadurch wird die Set-Variable ausgelöst: Objektknoten , der den Wert der startGlowVFX-Objektvariable in "false" verwandelt.

Ein Screenshot des get-ausgestatteten Knotens mit einem Wert von keinem, nachdem der Wand gelöscht wurde.

Dadurch werden die Knoten in der Netzwerkstartmagic-Knotengruppe erneut ausgelöst und der Partikeleffekt "Sparkly vapor" vfx_wand_ethereal_persistent_02 deaktiviert, was der Wert der PersistantVFX-Objektvariable ist.

Ein Screenshot des persistenten vfx Boolen wurde in

Vorschläge zum Experimentieren mit dem Skript

  • Erstellen Sie unterschiedliche Effekte, die ausgelöst werden können, wenn eine der vorhandenen Equippables aufgenommen und gehalten wird.
  • Erstellen Sie neue Equippables, die einige der vorhandenen Effekte verwenden könnten. Beispielsweise könnten bestimmte Arten von Feuerwerkskörpern die "Funkeln"-Effekte verwenden, die derzeit von der Wand verwendet werden.
  • Erstellen Sie unterschiedliche Effekte und Verhaltensweisen für eine neue Equippable, die ausgelöst werden kann, wenn die Equippable gehalten wird und die linke Maustaste (PC) oder die Controllertaste (Quest) gedrückt wird. Anstelle eines Wands könnten Sie z. B. eine Angelstange haben, die beim Drücken der Taste einen Köder ausdrückt.
  • Denken Sie über den Unterschied zwischen dem Verschieben eines Objekts direkt in den aktivierten Zustand bei der Abholung (z. B. Drill) und dem Vorhandensein eines Objekts, das nicht aktiviert wird, und wechselt dann in den aktivierten Zustand, nachdem der Teilnehmer geklickt hat (z. B. das Tablet). Machen Sie Objekte, die beide Ansätze nutzen.

Nächste Schritte