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.
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.
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.
Öffnen Sie das Beispiel "Toybox", und stellen Sie sicher, dass Sie sich in der Toybox-Szene befinden.
Wählen Sie in der Hierarchie das Wand_Prefab GameObject aus.
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".
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".
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".
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 ...
... und ändert auch den Wert der Objektvariable StartGlowVFX auf "true".
Beachten Sie, dass der Text oberhalb der Knoten " isMine " und "On State Changed " "Lokal für diesen Client" lautet.
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.
Tipp: Die isMine-Variable befindet sich im Skript "Mesh Interactable Body" .
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".
Die Zustandsänderung bewirkt, dass der Wert "true" von startFLowVFX an einen If-Knoten übergeben wird.
... und dies bewirkt, dass der Wert der PersistentVFX-Objektvariable auch "true" ist, wodurch der vfx_wand-ethereal_persistent_02 Partikelsystemeffekt ("Funkdampf") ausgelöst wird.
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 ...
... 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").
Tipp: Die isActivated-Variable befindet sich im Skript "Mesh Interactable Body" .
Aktivieren des aktivierten Zustandspartikeleffekts
Wir nehmen den Fluss in der Knotengruppe mit dem Namen "Rechtschreibung" beim Klicken auf.
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.
Dadurch werden die Knoten in der Netzwerkstartmagic-Knotengruppe erneut ausgelöst. Diesmal bewirkt der "false"-Wert von startGlowVFX , dass der PersistentVFX-Partikeleffekt deaktiviert wird.
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.
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.
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.
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.
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.
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.
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.
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.