Freigeben über


Handbuch für Cloud Scripting-Programmierer

In diesem Handbuch wird beschrieben, wie Sie die Mesh Cloud Scripting-API und Entwicklertools zum Erstellen von Umgebungen verwenden (diese beginnen als Projekte in Unity und werden dann in eine Mesh-Sammlung hochgeladen). Es wird empfohlen, zuerst die Set Cloud Scripting-Infrastruktur in Azure zu lesen, um sich mit den Konzepten und der grundlegenden Architektur von Mesh Cloud Scripting vertraut zu machen.

In diesem Abschnitt werden die Features und die Schnittstelle der Mesh Cloud Scripting-API beschrieben, die zum Schreiben der Skripts verwendet wird, die das Verhalten in Umgebungen steuern.

Grundlegende DOM-Struktur

Die DOM-Struktur spiegelt die Struktur Ihrer Unity-Szene wieder. Das Element "Scene" der Anwendung entspricht dem Spielobjekt, an das Ihre Mesh Cloud Scripting-Komponente angefügt ist. Die folgenden Mesh Cloud Scripting-API-Klassen ordnen 1:1-Objekte zu, die im Editor erstellt wurden:

  • GameObject (& Transform Component) –> TransformNode
  • Light Component -> PointLightNode, SpotLightNode, DirectionalLightNode
  • Animatorkomponente -> AnimationNode (und abgeleitete Klassen, siehe unten)
  • Box Collider-Komponente -> BoxGeometryNode
  • Kugel kollidieren Komponente -> SphereGeometryNode
  • Kapsel Collider-Komponente -> CapsuleGeometryNode
  • Mesh Collider-Komponente -> MeshGeometryNode
  • Text Mesh Pro-Komponente -> TextNode
  • Starrkörperkomponente -> RigidBodyNode

Wenn Sie z. B. eine Szene mit einem Spielobjekt erstellen, das eine Light-Komponente (auf ein Punktlicht festgelegt) und eine kugel kollidiert ist, enthält Ihre Szene einen TransformNode mit zwei untergeordneten Elementen: einem PointLightNode und einem SphereGeometryNode.

Darüber hinaus verfügen einige Mesh Cloud Scripting-API-Objekte nicht über entsprechende integrierte Unity-Komponenten. Dies sind zusätzliche Komponenten, die Sie in Unity erstellen können, die Teil des Mesh-Toolkit-Pakets sind.

  • Mesh Cloud Scripting-Komponente (oben beschrieben)
  • WebSlate-Komponente

Zuordnen des Unity-DOM zum Gitter-DOM

Sie können eine Szene mit Komponenten erstellen, die die Mesh Cloud Scripting-API nicht kennt. Diese sind einfach nicht im Mesh Cloud Scripting DOM für die Szene vorhanden. Die vollständige Szenenstruktur von GameObjects wird jedoch in der DOM-API als TransformNodes gespiegelt.

Unity verfügt über ein GameObject-/Komponenten-API-Shape; Das Mesh Cloud Scripting DOM verfügt jedoch über eine einzige Strukturstruktur. Ein TransformNode in der Mesh Cloud Scripting-API verfügt über untergeordnete Elemente, die möglicherweise andere TransformNodes sind oder andere Knoten sein können, die Komponenten zugeordnet sind. Wir können dies als zusammengeführte Liste der Komponenten des zugeordneten Spielobjekts und der untergeordneten Elemente der Transformationskomponente betrachten.

Rect Transform

Wenn Sie eine Komponente hinzufügen, die beispielsweise eine RectTransform verwendet, z. B. die Text Mesh Pro-Komponente, wird das Spielobjekt nicht als Knoten im Gitter cloud Scripting-Szenendiagramm angezeigt. Es ist weiterhin möglich, eine solche Komponente zu verschieben, zu aktivieren und zu deaktivieren, aber dazu müssen Sie das Spielobjekt mithilfe von RectTransform in einem anderen Spielobjekt mit der regulären Transform-Komponente umschließen.

Eigenschaftenänderungsereignisse

Sie können Eigenschaftsänderungsereignisse abonnieren, indem Sie einen beliebigen Knoten in der Hierarchie aufrufen AddPropertyChangedEventHandler . Sie müssen den Namen der Eigenschaft als Zeichenfolge übergeben.

Es ist auch möglich, alle Ereignisse durch Abonnieren des DomObjectPropertyChanged Ereignisses zu abonnieren. Dies wird aufgerufen, wenn eine eigenschaft im DOM geändert wird.

Objektlebenszyklus

Knoten werden beim Erstellen nicht analysiert. Dies bedeutet, dass sie in der Szene erst angezeigt werden, wenn sie explizit als untergeordnetes Element zur Szene oder zu einem der untergeordneten Elemente hinzugefügt werden. Ebenso wird das Festlegen des übergeordneten Elements eines Knotens auf NULL und dessen Nachfolger aus der Szene entfernt.

Manchmal möchten Sie einen Knoten vorübergehend deaktivieren, aber keinen Datensatz davon speichern, wo er sich in der Szene befand. Aus diesem Grund verfügt jeder Knoten über ein "aktives" Flag. Wenn dieser Wert auf "false" festgelegt ist, wird der Knoten und dessen Nachfolger deaktiviert.

Sie können Spielobjekte und -komponenten in Unity erstellen, die Teil der Szene sind, aber deaktiviert sind. Diese werden als Knoten in der Hierarchie der Mesh Cloud Scripting-Szene angezeigt, die aktive Kennzeichnung ist jedoch auf "false" festgelegt. Wenn Sie die aktive Kennzeichnung auf "true" festlegen, werden sie in der Unity-Szene aktiviert.

Klonen und Reparenting

Knoten können geklont und in der Mesh Cloud Scripting-API analysiert werden. die entsprechende Unity-Szene wird entsprechend aktualisiert. Wenn Sie einen Knoten klonen, klonen Sie diesen Knoten und alle untergeordneten Elemente (einschließlich untergeordneter Elemente, die sich möglicherweise in den entsprechenden Unity-Objekten befinden, aber für Mesh Cloud Scripting nicht sichtbar sind).

Es ist möglich, Knoten zu klonen oder zu aktualisieren, die Unity-Komponenten entsprechen. Dies wird implementiert, indem diese Unity-Komponenten basierend auf den Mesh Cloud Scripting Node-Darstellungen neu eingerichtet werden. Nur Knoten, die über die Mesh Cloud Scripting-API erstellt werden können, können geklont oder analysiert werden. Wenn Sie eine Komponente in Unity erstellt und Felder festgelegt haben, die nicht im entsprechenden Mesh Cloud Scripting Node widergespiegelt werden, werden diese Felder auf ihre Standardwerte zurückgesetzt, wenn der Knoten selbst geklont wird. Aus diesem Grund wird empfohlen, Knoten zu klonen oder zu aktualisieren, in denen Sie Objekte bearbeiten, die in Unity erstellt wurden. Diese behalten immer alle ursprünglichen Unity-Einstellungen bei.

Benutzer

Es gibt verschiedene Stellen in der API, die Benutzereigenschaften bereitstellen. Die User.Identifier Eigenschaft ist eine persistente Bezeichnerzeichenfolge, die für den Benutzer dauerhaft ist, auch wenn der Benutzer die Zeichenfolge verlässt und erneut beitreten kann. Auf den Anzeigenamen des Benutzers kann auch zugegriffen User.DisplayNamewerden. Auf die Ereignis-ID, von der der Benutzer eine Verbindung hergestellt hat, kann über User.ConnectedEventIddie App zugegriffen werden.

Während der Entwicklung kann der Anzeigename, der Bezeichner und die Ereignis-ID im Komponenten-Editor der Mesh Cloud Scripting-Komponente in den "Entwicklereinstellungen" simuliert werden, wie unten dargestellt.

Simulierte Benutzereigenschaften

Avatars

Avatare sind die Darstellung von Benutzern in der Szene. Sie können verwendet werden, um Benutzer an einen bestimmten Ort zu teleieren, zwischen Szenen zu reisen und Kollisionen mit Triggervolumen zu erkennen.

Infodialogfeld

In Mesh Cloud Scripting ist es möglich, in der Microsoft Mesh-Anwendung ein Dialogfeld "Bildschirmbereich" mit einer benutzerdefinierten Nachricht aufzufüllen. SceneNode enthält eine Funktion dafür. ShowMessageToParticipants(string message, IReadOnlyCollection<Participant> participants) Rich-Text-Tags können in der Nachricht verwendet werden, um Texteigenschaften (Farbe, Fett usw.) zu steuern.

Eingabedialogfelder

Mesh Cloud Scripting kann Texteingaben von einem Teilnehmer in einem Mesh-Ereignis mit einer benutzerdefinierten Nachricht anfordern. CloudApplication stellt die Methode Task<string> ShowInputDialogToParticipantAsync(string message, Participant participant, CancellationToken token)bereit. Rich-Text-Tags können in der Nachricht verwendet werden, um Texteigenschaften (z. B. Farbe oder Fett) zu steuern.

Klassen

CloudApplication

Die ICloudApplication Schnittstelle ist der Ausgangspunkt für die Entwicklung von Mesh-Apps. Sie ist in "App.cs" als _app Variable verfügbar. Zusätzlich zur Szene ICloudApplication gibt es Funktionen für alle verfügbaren Typen. Es verfügt auch über eine Reihe anderer Methoden, aber sie sind für die interne Verwendung vorgesehen.

InteractableNode

Das MeshInteractableSetup ist eine benutzerdefinierte Unity-Komponente, die Teil des Mesh-Toolkit-Pakets ist. Wenn Sie es an ein Spielobjekt in Unity anfügen, löst es Klickereignisse aus, wenn ein Benutzer auf eines der aktiven Kollidables in diesem Spielobjekt oder dessen untergeordneten Objekten klickt.

Nachfolgend sehen Sie ein einfaches Beispiel, in dem die MeshInteractableSetup-Komponente demselben Spielobjekt wie der Box-Kollidieren hinzugefügt wird:

Beispiel für einfache Eingabe

WebSlateNode

WebSlate ist eine benutzerdefinierte Unity-Komponente, die Teil des Mesh-Toolkit-Pakets ist. Wenn Sie Ihrer Szene ein WebSlate-Präfab hinzufügen möchten, wählen Sie "GameObject>Mesh Toolkit>WebSlate" in der Menüleiste aus. Die Website, die der URL-Eigenschaft der WebSlate-Instanz zugewiesen ist, wird auf dem Quad dieses Prefab gerendert.

Nachfolgend sehen Sie ein Beispiel, in dem der WebSlate-Prefab der Szene hinzugefügt und eine URL zugewiesen wurde:

        var webSlateNode = Root.FindFirstChild<WebSlateNode>(true);
        webSlateNode.Url = new System.Uri("https://en.wikipedia.org/wiki/Color");

WebSlate-Beispiel

Lauschen auf Klicks

Hier ist ein einfaches Mesh Cloud Scripting-Skript, das den Würfel jedes Mal dreht, wenn darauf geklickt wird. Ersetzen Sie die Stubmethode StartAsync in App.cs diesem Code.

        private float _angle = 0;

        public Task StartAsync(CancellationToken token)
        {
            // First we find the TransformNode that corresponds to our Cube gameobject
            var transform = _app.Scene.FindFirstChild<TransformNode>();

            // Then we find the InteractableNode child of that TransformNode
            var sensor = transform.FindFirstChild<InteractableNode>();

            // Handle a button click
            sensor.Selected += (_, _) =>
            {
                // Update the angle on each click
                _angle += MathF.PI / 8;
                transform.Rotation = new Rotation { X = 1, Y = 0, Z = 0, Angle = _angle };
            };

            return Task.CompletedTask;
        }

Trefferinformationen

Es ist möglich, herauszufinden, welcher Benutzer auf den Kollidierten geklickt hat, indem sie die Argumente des Eigenschaftsänderungsereignisses betrachten. Sie können auch den Kontakt normal und die Position des Klickens aus den Ereignisargumenten lesen. Diese Koordinaten sind relativ zum lokalen Koordinatenbereich des InteractableNode.

Animatoren

Sie können Ihrer Szene einen Unity-Animator erstellen und hinzufügen und ihn über Mesh Cloud Scripting steuern. Das Mesh-Toolkit-Plug-In durchsieht die Ressourcen in Ihrem Unity-Projekt, und für jeden gefundenen Animator generiert es eine Klasse in einem Ordner "AnimationScripts" in Ihrem Mesh Cloud Scripting-Projekt. Diese Klasse wird von AnimationNode abgeleitet und kann verwendet werden, um den Animator aus der Mesh Cloud Scripting zu steuern. Wenn Sie den Animator als Komponente zu einem Spielobjekt in Unity hinzufügen, finden Sie eine entsprechende Instanz der generierten Klasse als untergeordnetes Element des entsprechenden TransformNode. Mithilfe der API dieser Klasse können Sie den Animator steuern.

Das Mesh Cloud Scripting-Programmiermodell ist autoritativ, und wir unterstützen nur eine kleine Teilmenge der Animator-Funktionalität. Dies liegt daran, dass wir den Animator auf dem Server modellieren und erwarten, dass alle Clients genau mit dem Servermodell synchronisiert werden. Aus diesem Grund wird derzeit nur die folgende API unterstützt:

  • Statuseinstellung (für jede Ebene gibt es eine entsprechende Eigenschaft in der Klasse, die auf eine Enumeration basierend auf den verfügbaren Zuständen im Animator festgelegt werden kann). Zustände werden sofort festgelegt, nicht durch Übergänge.
  • Gleitkommavariableneinstellung: Nur Float-Variablen werden verfügbar gemacht, und nur zum Binden an "Motion Time" in einem Animator.
  • Schichtgeschwindigkeitseinstellung

Innerhalb eines Zustands können Sie einen Animationsclip ohne Einschränkungen für die Werte erstellen, die Sie in der Unity-Szene festlegen können. Animationsclips in Schleifen werden ebenfalls unterstützt. Die folgenden Features von Animatoren werden über AnimationNodes nicht unterstützt:

  • Übergänge: Wenn Sie Ihrem Animator Übergänge hinzufügen, können Sie diese nicht über die Mesh Cloud Scripting-API auslösen (der Server modelliert keine Übergänge).
  • Variablen (außer Floats zum Steuern der Bewegungszeit). Variablen, die zum Steuern der Übergangslogik oder Geschwindigkeitsmultiplikatoren verwendet werden, werden nicht unterstützt.
  • Gespiegelte Zustände, Zyklusversatz und Fuß-IK.

Verspäteter Beitritt und Animatoren

Wenn Clients einem Mesh-Ereignis beitreten, werden sie mit dem aktuellen Zustand und der lokalen Uhrzeit aller ausgeführten Animationsknoten synchronisiert. Wenn eine lang andauernde Animation in einem Zustand wiedergegeben wird, wird die Wiedergabezeit auf die richtige aktuelle Uhrzeit der Animation bei verspäteter Teilnahme festgelegt. Wenn Ihr Zustand jedoch Ereignisse auslöst, werden diese NICHT im spät eingebundenen Client ausgelöst. Einige andere Szenarien funktionieren möglicherweise nicht wie erwartet; Wenn Sie z. B. einen Sound auslösen, indem Sie eine AudioSource zu Beginn eines Zustands aktivieren, wird AudioSource weiterhin im Spätbeitrittsclient aktiviert, beginnt jedoch am Anfang des Audioclips.

Animator-Anfangszustand

Es wird empfohlen, Animatoren mit Standardzuständen zu erstellen, die nichts tun. Wenn eine Szene mit der Wiedergabe in Unity beginnt, werden alle Animatoren aktiviert und die Standardanimationen wiedergegeben. Dies kann passieren, bevor die Mesh Cloud Scripting Service-Verbindung auftritt; Daher gibt es keine Möglichkeit, diese Zustände und das Verhalten zu synchronisieren, möglicherweise nicht wie gewünscht.

Animator reparenting and cloning

AnimationNodes können nicht über die Mesh Cloud Scripting-API erstellt werden. Die einzige Möglichkeit zum Erstellen eines AnimationNode besteht darin, eine Unity-Szene zu exportieren, die eine Animatorkomponente enthält. Wenn Sie versuchen, den AnimationNode zu klonen oder erneut zu aktualisieren, erhalten Sie eine Fehlermeldung, da es keine Möglichkeit gibt, diese Aktion zu unterstützen. Es ist weiterhin möglich, das übergeordnete Element des AnimationNode-Objekts zu klonen oder zu aktualisieren, da dies dem enthaltenden Unity-Spielobjekt entspricht, das geklont und übergeordnet werden kann.

Hinweise zu generierten Code

Der generierte Code entfernt Leerzeichen aus Namen von Animatoren, Ebenen, Zuständen und Variablen; Beispielsweise wird der Variablenname "my var" in Code zu "myVar". Aus diesem Gründen ist es möglich, Animatoren zu erstellen, die keinen gültigen Code generieren. Wenn Sie beispielsweise zwei Variablen mit dem Namen "my var" und "myVar" haben, erhalten Sie während der Generierung einen Fehler und eine Meldung, in der Sie aufgefordert werden, die Variablen umzubenennen.

LightNode

PointLightNode, DirectionalLightNode und SpotLightNode sind alle der Unity Light-Komponente zugeordnet (deren Typ auf den entsprechenden Wert festgelegt ist). Es ist möglich, die grundlegenden Parameter dieser Lichter über die LightNode-APIs festzulegen. Es ist auch möglich, Lights von Hand über die API zu erstellen. Durch das Erstellen von Lichtknoten über die API bleiben Parameter erhalten, die nicht über die Mesh Cloud Scripting-API auf ihre Standardwerte festgelegt werden können.

GeometryNode

BoxGeometryNode, SphereGeometryNode, CapsuleGeometryNode und MeshGeometryNode map to Unity es Box Collider Component, Sphere Collider Component, Capsule Collider Component, and Mesh Collider Component, respectively. Sie können auch über die Mesh Cloud Scripting-API erstellt werden. Durch Aktivieren und Deaktivieren von Geometry-Knoten werden sie von Trefferkandidaten hinzugefügt und entfernt, wenn ein MeshInteractableSetup an das Spielobjekt oder eines seiner übergeordneten Elemente angefügt ist.

Durch das Erstellen von Geometrieknoten über die API bleiben Parameter erhalten, die nicht über die Mesh-API auf ihre Standardwerte festgelegt werden können (beispielsweise wird "Physics Material" auf "none" festgelegt, und "isTrigger" wird auf "false" festgelegt).

RigidBodyNode

Durch Das Hinzufügen einer Starrkörperkomponente zu einem Objekt wird ihre Bewegung unter die Kontrolle der Gitterphysik gesetzt. Ohne Code hinzuzufügen, wird ein Rigidbody-Objekt durch Schwerkraft nach unten gezogen und reagiert auf Kollisionen mit anderen Objekten.

Hinweis: GeometryNode.Friction wird zurückgegeben staticFriction. Wenn dies jedoch auf der Mesh Cloud Scripting-Seite festgelegt ist, wird es sowohl als auch staticFriction dynamicFriction auf Clients aktualisiert.

Auslösen von Volumes

Geometrieknoten können als Triggervolumes fungieren, wenn ihre IsTrigger Eigenschaft auf "true" festgelegt ist. Dieses Kennzeichen entspricht der Eigenschaft auf dem IsTrigger Kollidieren in Unity und kann zur Laufzeit nicht geändert werden. Wenn die Geometrie ein Auslöser ist, wird sie generiert Entered und Exited für alle Avatare, die mit ihr überlappen, beginnen/beenden.

Hinweis: Das Unity-Objekt muss der TriggerVolume Schicht hinzugefügt werden, damit der Teleportstrahl ihn ignorieren kann, da Kollidierungen in der Schicht den Default Teleportstrahl blockieren.

TextNode

TextNode wird der TextMeshPro-Komponente von Unity zugeordnet. Wenn Sie Ihrer Szene eine TextMeshPro-Komponente hinzufügen, gibt es eine entsprechende TextNode in Ihrer Hierarchie der Mesh Cloud Scripting-Szene. Auf diese Weise können Sie den Text der Komponente zur Laufzeit festlegen. Sie können auch die grundlegenden Texteigenschaften über die TextNode-API ändern– fett, kursiv, unterstrichen, durchgestrichen und farbe. Es ist derzeit nicht möglich, einen TextNode über die API zu erstellen; Sie müssen sie erstellen, indem Sie sie ihrer Szene in Unity hinzufügen. Außerdem können Sie einen TextNode nicht direkt klonen . Sie müssen stattdessen das übergeordnete TranformNode-Element von TextNode klonen.

Gittermodelle

Gitter sind derzeit "ausgeblendete" Komponenten für die Mesh Cloud Scripting-API. Sie können im Unity-Editor erstellt und bearbeitet werden, indem sie ihre übergeordneten Spielobjekte/Transformationskomponenten bearbeiten, aber sie können nicht programmgesteuert erstellt werden, oder ihre Eigenschaften können zur Laufzeit über die Mesh-API bearbeitet werden.

Visuelle Skripts

Sie können ihrer Szene einen Unity-Skriptcomputer erstellen und hinzufügen und ihn über Mesh Cloud Scripting steuern. Das Mesh-Toolkit-Plug-In durchsieht die Ressourcen in Ihrem Unity-Projekt, und für jeden gefundenen Skriptcomputer generiert es eine Klasse in einem Ordner "VisualScripts" in Ihrem Mesh Cloud Scripting-Projekt. Diese Klasse wird von VisualScriptNode abgeleitet und kann verwendet werden, um die Unity-Variablen zu bearbeiten, die dem Skriptcomputer von Mesh Cloud Scripting zugeordnet sind. Wenn Sie den Skriptcomputer als Komponente zu einem GameObject in Unity hinzufügen, finden Sie eine entsprechende Instanz der generierten Klasse als untergeordnetes Element des entsprechenden TransformNode. Mithilfe der API dieser Klasse können Sie die Variablen des Skriptcomputers steuern.

Zustandssynchronisierung

Standardmäßig repliziert Mesh szenenänderungen, die von visuellen Skripts auf einem Client auf allen anderen Clients vorgenommen werden. Damit Mesh Cloud Scripting eine Änderung durch visuelle Skripterstellung beachten kann, müssen die folgenden Voraussetzungen erfüllt werden:

  • Die Script Machine-Komponente befindet sich in einem GameObject, das ein untergeordnetes Element des Stamms der Mesh Cloud Scripting-Szene ist.
  • Die Option "Visual Scripting aktivieren" der Mesh Cloud Scripting-Komponente ist aktiviert.

Wenn eine der oben genannten Bedingungen nicht erfüllt ist, repliziert die Mesh Visual Scripting-Laufzeit weiterhin die Szenenänderungen, aber Mesh Cloud Scripting bleibt bei diesen Änderungen verborgen.

Anfangszustand

Es wird empfohlen, dass Ihre visuellen Skripts den freigegebenen Zustand beim Start nicht ändern oder verlassen. Das On Start-Ereignis geschieht in der Regel, bevor die Mesh Cloud Scripting Service-Verbindung auftritt. Daher gibt es keine Möglichkeit, den Zustand zu diesem Zeitpunkt zu synchronisieren, und das Verhalten ist möglicherweise nicht das, was Sie wünschen.

Verspäteter Beitritt

Wenn Clients einem Mesh-Ereignis beitreten, werden sie mit dem aktuellen Status aller Visual Script-Knoten synchronisiert. Alle Statusänderungsereignisse, die möglicherweise zuvor auf den anderen Clients ausgelöst wurden, werden nicht auf dem verspäteten Client ausgelöst. Einige andere Szenarien funktionieren möglicherweise nicht wie erwartet; Wenn Sie beispielsweise einen Sound auslösen, indem Sie eine AudioSource als Reaktion auf ein On State Changed-Ereignis aktivieren, wird AudioSource weiterhin im Spätbeitrittsclient aktiviert, beginnt jedoch am Anfang des Audioclips.

Reparenting und Klonen

VisualScriptNode kann nicht über die Mesh Cloud Scripting-API erstellt werden. Die einzige Möglichkeit zum Erstellen eines VisualScriptNode besteht darin, eine Unity-Szene zu exportieren, die eine Script Machine-Komponente enthält. Wenn Sie versuchen, visualScriptNode zu klonen oder erneut zu aktualisieren, erhalten Sie einen Fehler, da es keine Möglichkeit gibt, diese Aktion zu unterstützen. Es ist weiterhin möglich, das übergeordnete Element von VisualScriptNode zu klonen oder zu aktualisieren, da dies dem enthaltenden Unity GameObject entspricht, das geklont und übergeordnet werden kann.

Hinweise zu generierten Code

Der generierte Code entfernt Leerzeichen aus Namen von Skriptcomputern und Variablen; Beispielsweise wird der Variablenname "my var" in Code zu "MyVar". Aus diesem Gründen ist es möglich, Skriptcomputer zu erstellen, die keinen gültigen Code generieren. Wenn Sie beispielsweise zwei Variablen mit dem Namen "my var" und "myVar" haben, erhalten Sie während der Generierung einen Fehler und eine Meldung, in der Sie aufgefordert werden, die Variablen umzubenennen.

Weitere Themen zu Mesh Cloud Scripting

Hinzufügen von Ressourcen zum Mesh Cloud Scripting Service

Wenn Sie eine Ressource für den zu verwendenden Mesh Cloud Scripting Service hinzufügen müssen, müssen Sie sie als eingebettete Ressource zu Ihrer C#-Projektdatei hinzufügen. Dies kann über die Projekt-UI in Visual Studio oder durch direktes Hinzufügen der folgenden Zeile zur CSPROJ-Datei erfolgen:

<EmbeddedResource Include="<my_resource_file>" CopyToOutputDirectory="PreserveNewest" />

Beachten Sie, dass dies der Gepackte "scene.map" entspricht, den Sie in der CSPROJ-Datei zur Referenz sehen können.

Arbeiten mit Gitterphysik

Mesh Physics kümmert sich um die Synchronisierung von Bewegung von starren Körpern zwischen Clients. Mesh Cloud Scripting TransformNode.Position, TransformNode.RotationRigidBody.Velocity und RigidBody.AngularVelocity wird nicht mit dem neuesten Simulationszustand aktualisiert. Clients wenden jedoch Änderungen an, wenn diese im Mesh Cloud Scripting Service festgelegt sind. Beachten Sie, dass das Ändern einzelner Eigenschaften andere unverändert bleibt. Wenn z. B. nur die Position festgelegt ist, wird die Geschwindigkeit nicht geändert, und starrer Körper setzt die Bewegung mit alter Geschwindigkeit von neuer Position fort. Da mesh Cloud Scripting Service nicht mit dem neuesten Bewegungszustand für starre Körper aktualisiert wird, empfiehlt es sich, diese nur für neue starre Körper festzulegen.

Wenn TransformNode mit RigidBodyNode geklont wird, wird der geklonte Text registriert und zur Synchronisierung zwischen Clients übergeben Mesh Physics . Hinweis: Geklonter starrer Körper verfügt über Position, Drehung und Geschwindigkeiten vom Anfang der Szene des ursprünglichen starren Körpers. Wenn dies anders sein sollte, müssen sie explizit in der Mesh Cloud Scripting festgelegt werden.

Nächste Schritte