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.DisplayName
werden. Auf die Ereignis-ID, von der der Benutzer eine Verbindung hergestellt hat, kann über User.ConnectedEventId
die 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.
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:
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");
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.Rotation
RigidBody.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.