Schulung
Modul
In diesem Modul erfahren Sie, wie Sie Objekte in einer Szene platzieren und mithilfe von Solvern nachverfolgen.
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge aus, um die neuesten Funktionen, Sicherheitsupdates und technischen Support zu nutzen.
Sie können mit dem Scannen der Unity-Physikdokumente beginnen. Es stehen viele Ressourcen zur Verfügung, wie Sie die Physik in Unity optimieren können.
Mesh Physics bietet einige zusätzliche Herausforderungen. Hier sind einige Tipps, die Ihnen dabei helfen sollen, sie zu überwinden.
Dicke Wände machen: Die Netzwerksynchronisierung kann starre Körper leicht verschieben. Daher wird ein zusätzlicher Durchdringungsaufwand zwischen Objekten angezeigt. Kleine dynamische Körper könnten durch dünne Wände geschoben werden. Bei dickeren Objekten und Wänden sind diese Tunneleffekte weniger wahrscheinlich. Verwenden Sie nach Möglichkeit konvexen Rumpf oder einen kleinen Satz konvexer Hüllen für dynamische Körper.
Verwenden Sie nach Möglichkeit dicke konvexe Teile für statische Geometrie. Versuchen Sie, Gitter zu vermeiden, insbesondere hochdichte Gitter.
Realistische Masse in kg: Inhalte aus verschiedenen Quellen können in derselben Szene interagieren. Dies funktioniert gut, wenn die Massenverhältnisse zwischen den Objekten angemessen sind. Ein guter Ausgangspunkt ist die Zuweisung realistischer Massen zu Körpern mit kg.
Sie können der Szene, die mit physikalischen Körpern interagiert, Automatisch wiedergebende Animationen hinzufügen. Diese Animationen werden automatisch über Clients hinweg synchronisiert, indem sie die Wiedergabegeschwindigkeit vorübergehend anpassen (verlangsamen oder beschleunigen) auf jedem Client, bis alle Clients gleichzeitig im gleichen Animationszustand sind.
Einstellungen
Der Animationsclip, der von der Animation für die automatische Wiedergabe verwendet wird, kann einen beliebigen Umbruchmodus verwenden. Nützliche Auswahlmöglichkeiten sind "Loop" und "Ping Pong".
Wenn Sie einem Objekt eine der folgenden MonoBehaviour
Komponenten hinzufügen, wird diesem Objekt das spezifische Verhalten hinzugefügt.
Macht Körper an anderen Körpern fest. Es könnte verwendet werden, um Pfeile an anderen Körpern zu werfen oder ein Bild an einer Wand anzufügen. Dies wird durch die Schaffung einer festen Einschränkung zwischen den beiden beteiligten Stellen implementiert. Hinweis: Dieser Vorgang wird für alle Clients ausgeführt und daher als spezielle Netzwerknachricht implementiert.
Einstellungen
Stellt sicher, dass starre Körper innerhalb der Grenzen eines oder mehrerer Trigger kollidieren.
Damit diese Komponente funktioniert, muss sie an einen oder mehrere Trigger-Kollder angefügt werden. (Diese Trigger-Kollidierungen können auch in der Transformationshierarchie unterhalb der GameObject
angefügten Komponente geschachtelt werden.)
Die starren Körper, die von dieser Komponente betroffen sind, müssen sich bereits innerhalb der Grenzen des Triggers (das "Triggervolumen") befinden, wenn die Szene beginnt. Die Mitte der Masse jedes dieser starren Körper wird dann eingeschränkt, um innerhalb der Grenzen des Triggervolumens zu bleiben – es ist nicht möglich, die Massenzentrierung dieser starren Körper an beliebiger Stelle außerhalb zu ziehen oder anderweitig zu bewegen.
Einstellungen:
Die max. Abweichung vom Eindämmung ermöglicht das Zentrum der Masse eines betroffenen Starrkörpers, leicht außerhalb der Triggervolumen zu gehen, bevor es wieder einrasten kann. Dies ist ein Leistungsoptimierungs-Kompromiss: Wenn die zulässige maximale Abweichung groß ist, kann der Textkörper das Triggervolumen sichtbar verlassen und sich wieder einrasten, aber der Code kann vermeiden, die Position des Körpers sehr oft zu überprüfen und zu überprüfen, wenn er sich ruhet oder langsam innerhalb des Triggervolumens bewegt.
Betroffene Körper definieren optionale Filterbedingungen für die von dieser Komponente betroffenen Körper. (Standardmäßig sind alle Körper betroffen.)
Ermöglicht es, einen starren Menschen zu beschleunigen/zu verlangsamen, bis er eine bestimmte Zielgeschwindigkeit erreicht.
Diese Komponente steuert sowohl die Größe als auch die Richtung der Geschwindigkeit. Siehe "Velocity Magnitude Field ", um nur die Größe und das Geschwindigkeitsrichtungsfeld zu steuern, um nur die Richtung zu steuern. Es gibt zwei Betriebsmodi:
Einstellungen:
Ändert, wie sich die Schwerkraft auf starre Körper innerhalb der Grenzen eines oder mehrerer Trigger kollidiert.
Damit diese Komponente funktioniert, muss sie an einen oder mehrere Trigger-Kollder angefügt werden. (Diese Trigger-Kollidierungen können auch in der Transformationshierarchie unterhalb des GameObject geschachtelt werden, das diese Komponente angefügt hat.)
Alle starren Körper, die den Trigger kollidieren oder überlappen (das "Triggervolumen") verhalten sich entsprechend den Schwerkrafteinstellungen dieser Komponente und nicht der globalen Physischen Schwerkraft. Starre Körper, die "Schwerkraft verwenden" deaktiviert haben, werden ignoriert.
Es gibt eine interessante Beziehung zwischen der Wahrnehmung der eigenen Größe des Spielers in der Welt und schwerkraft:
Einstellungen:
Simuliert die Schwerkraft eines "Toy-Planeten" in Ihrer Szene.
Damit diese Komponente funktioniert, muss sie an einen oder mehrere Trigger-Kollder angefügt werden. (Diese Trigger-Kollidierungen können auch in der Transformationshierarchie unterhalb des GameObject geschachtelt werden, das diese Komponente angefügt hat.)
Alle starren Körper, die den Trigger kollidieren oder überlappen (das "Triggervolumen") werden an die Position des Objekts gezogen, das diese Komponente angefügt hat.
Einstellungen:
Schwerkraft definiert das Ausmaß der Schwerkraft. Dies ist die Beschleunigung des orbitierenden Körpers (der "Mond") in Richtung des zentralen Körpers in einem 1-Meter-Abstand. Da die Orbitgeschwindigkeit sqrt(Schwerkraft/Radius) ist, beschreibt dieser Wert die Geschwindigkeit eines Monds in einer stabilen Umlaufbahn in einem Radius von einem Meter.
Mit "Global Gravity " wird die globale Physik-Schwerkrafteinstellung der Szene für Körper deaktiviert, die von dieser Komponente betroffen sind. Standardmäßig wirkt sich die schwerkraft der globalen Szene immer noch auf Ihren Planeten und seine Monde aus.
Betroffene Körper definieren optionale Filterbedingungen für die Körper, die in diesem Schwerkraftfeld zu Monden werden können.
Force Moons On Circular Orbit ist ein Betrug, der einige sanfte Kräfte anwendet, um den Mond in eine kreisförmige Orbit zu drücken. Die Motivation besteht darin, dass es für einen Nicht-Experten schwer ist, Schwerkraft und Anfangsgeschwindigkeit der Körper auf eine Weise festzulegen, um eine kreisförmige Orbit zu erreichen. Wenn diese Option aktiviert ist, beginnen alle Monde, die sich im Schwerkraftfeld im Unity-Editor befinden, automatisch mit dem Orbit ihres zentralen Körpers, wenn die Szene geladen wird.
Die Stärke der erzwungenen Orbit skaliert die Beschleunigung, die auf den Mond auf eine kreisförmige Orbit angewendet wird.
Set Forced Radius Where Placed makes moons that are placed inside the gravity field in Unity Editor automatically adopt their initial distance from the central body as their preferred orbit.
Set Forced Radius Where Dropped macht Monden, die interaktiv gegriffen und in das Schwerkraftfeld verschoben werden, automatisch den Abstand vom zentralen Körper übernehmen, an dem sie als bevorzugte Orbit abgelegt wurden.
Der Standardzwingradius definiert den Standardradius für den obigen Cheat, der verwendet wird, es sei denn, er wird von einer der anderen Optionen außer Kraft gesetzt.
Simuliert Auftrieb beliebiger starrer Körper auf Wasser: Körper scheinen auf dem verbundenen Auslöservolumen zu schweben.
Damit diese Komponente funktioniert, muss sie an einen oder mehrere Trigger-Kollder angefügt werden. (Diese Trigger-Kollidierungen können auch in der Transformationshierarchie unterhalb des GameObject geschachtelt werden, das diese Komponente angefügt hat.)
Alle starren Körper, die den Auslöser berühren oder überlappen (das "Triggervolumen") erleben Auftriebskräfte (upthrust), um sie am Wasser zu halten.
Diese Komponente verwendet die Form der Kollidierungen des Starrkörpers, um seine Dichte (d. h. Volumen geteilt durch Masse), Auftrieb, Ziehen und Reibung zu berechnen.
Vorteil: Leistung. Die Berechnungskosten der Auftriebsberechnungen werden linear mit der Anzahl der Kollidiervertices skaliert. Typische Physik-Kollidierungen für Körper, auch wenn bereits vereinfacht, sind oft wesentlich komplexer (in Bezug auf die Anzahl der Scheitelpunkte) als erforderlich, damit die Auftrieb gut genug funktioniert.
Verwenden: Hinzufügen eines (oder mehrerer) zusätzlicher Kollidierungen (sie können deaktiviert werden) zu einem Textkörper. Markieren Sie die Kolloder als explizite Auftriebshüllen, indem Sie ihnen ein physikalisches Material mit dem Namen BuoyancyHull
(genaue Rechtschreibung!) zuweisen. Die Konfigurationsdetails dieses Physikmaterials spielen keine Rolle – ein geeignetes Physikmaterial wird mit dem Mesh-Toolkit-Paket geliefert. Wenn ein Körper Kollidierungen wie das markiert hat, werden nur diese Kollidierungen für Auftriebsberechnungen verwendet; alle anderen Kollidierungen werden ignoriert.
Bewährte Methoden: Explizite Auftriebshülle kollidiert mit jedem Starrkörper, der möglicherweise in ein BuoyancyField geworfen werden kann. Es ist am besten (und am einfachsten), Cube-Kollidierungen zu verwenden, da sie die wenigsten Scheitelpunkte (acht pro Kollidieren) haben. Der Abgleich der genauen visuellen Form des auftriebigen Körpers ist in der Regel nicht erforderlich, um ein gutes Ergebnis zu erzielen; Eine sehr grobe Annäherung reicht in der Regel aus.
Einstellungen:
Wichtig: Damit die Komponente auf kollidierte Gitterdreiecke eines Starrkörpers zugreifen kann, muss das Kontrollkästchen "Lese-/Schreibzugriff aktiviert" in den Importeinstellungen des Kollidierengitters aktiviert sein. Andernfalls wird der Körper vom Auftriebsfeld ignoriert und wird durch das Feld fallen, ohne davon betroffen zu sein.
Wichtig: Stellen Sie sicher, dass Ihre physikalischen Körper plausible Massen haben, um sicherzustellen, dass sie sich wie erwartet in einem Auftriebsfeld verhalten:
Rigidbody
Standard einer Masseeinheit), wird sie einfach über der simulierten Flüssigkeit sitzen.Standardmäßig wird durch das Auftriebsfeld die Oberfläche des Auslöservolumens untersucht, um die Form der Wasseroberfläche zu bestimmen (vorbehaltlich der gewählten Einstellung des Wasseroberflächentyps ). Surfaces, die im CPU-Speicher animiert werden, können auf diese Weise abgesampelt werden, aber Oberflächen, die von einem GPU-Vertex-Shader animiert werden, sind für das Skript zur Laufzeit nicht sichtbar. Die BuoyancyField
Komponente stellt einen skriptgeschützten Rückrufdelegat mit dem Namen GetDistanceFromSurface
bereit, mit dem externe Skripts Informationen zu einer GPU-animierten Wasseroberfläche bereitstellen können.
In der BuoyancyFieldWaves
nachstehenden Komponente erfahren Sie, wie Sie eine wellenförmige Wasseroberfläche mit einem Code-Ansatz erhalten.
Add-On zu der BuoyancyField
Komponente, die mit einem bestimmten Vertex-Shader BuoyancyFieldWaves_VertexPosition
funktioniert (verfügbar sowohl als Unter-Shaderdiagramm als auch als HLSL-Includedatei). Dadurch entsteht der visuelle Effekt einer wellenförmigen Wasseroberfläche zusammen mit dem entsprechenden Verhalten von Objekten, die auf der Wasseroberfläche schweben.
Diese Komponente muss einem GameObject hinzugefügt werden, das bereits eine BuoyancyField
Komponente hinzugefügt hat.
Die animierte Wasseroberfläche muss als flaches, tesseliertes Gitter geliefert werden, dessen Grenzen die gewünschte Form der Wasseroberfläche aufweisen, wenn sie von oben nach unten zu sehen sind. Das für die Wasseroberfläche verwendete Material muss einen Shader verwenden, der den BuoyancyFieldWaves_VertexPosition
Unter-Shader enthält, um die Vertexpositionen des Gitters zu bestimmen. Sie können das enthaltene Beispielmaterial BasicWavyWaterSurface
(und das Shaderdiagramm mit demselben Namen) als Ausgangspunkt für Ihre eigenen Shaderentwicklungen verwenden.
Einstellungen:
MeshRenderer
Komponente, die das Wasseroberflächengitter rendert.
float
Shadereigenschaft, die von dieser Komponente ständig aktualisiert wird, wobei ein fortlaufend steigender Zeitraum (gemessen in Sekunden) für alle Clients erfolgt. Der BuoyancyFieldWaves_VertexPosition
Unter-Shader verwendet diese gemeinsame Zeit, um ein Wellenmuster zu erstellen, das auf allen Clients synchronisiert bleibt und mit dem Verhalten des Auftriebsfelds synchronisiert wird.float
Shadereigenschaft, die die Basisgeschwindigkeit bestimmt, mit der die Wellen horizontal verteilt werden. Der Eigenschaftswert selbst muss im Material festgelegt werden, das auf das Wellenoberflächengitter angewendet wird. Wenn Sie dies auf Null festlegen, wird die Wellenoberfläche statisch und unoving.float
Shadereigenschaft vom Typ "-type", die die Grobheit des Wellenmusters bestimmt. Der Eigenschaftswert selbst muss im Material festgelegt werden, das auf das Wellenoberflächengitter angewendet wird. Kleinere Werte erzeugen kurze Wellen; größere Werte erzeugen lange, aufräumende Wellen.float
Shadereigenschaft, die die Basishöhe der Wellen bestimmt. Der Eigenschaftswert selbst muss im Material festgelegt werden, das auf das Wellenoberflächengitter angewendet wird. Wenn Sie dies auf Null setzen, wird die Wellenoberfläche vollständig flach.Das enthaltene Beispiel-Shaderdiagramm BasicWavyWaterSurface
(das vom Material mit demselben Namen verwendet wird) verwendet den erforderlichen BuoyancyFieldWaves_VertexPosition
Vertex-Unter-Shader, um die wellenförmige 3D-Oberfläche zu erzeugen, enthält jedoch nur eine minimale Stand-In-Implementierung für den Fragmentshader, wodurch sie die Oberfläche als unschattiges, halbtransparentes Gitter rendert.
Sie können den Fragmentpfad eines Shaders anpassen, der mit der BuoyancyFieldWaves
Komponente vollständig nach Ihren Wünschen verwendet wird. Es ist jedoch wichtig, dass der Vertexpfad Ihres Shaders das BuoyancyFieldWaves_VertexPosition
Unter-Shader-Diagramm verwendet und die vier Eingaben für dieses Unter-Shaderdiagramm als float
Shadereigenschaften des gesamten Shaderdiagramms verfügbar macht, damit die Komponente zur Laufzeit darauf zugreifen kann. Wenn ihr Shader das erforderliche Unter-Shader-Diagramm nicht enthält oder wenn eine der erforderlichen Shadereigenschaften nicht verfügbar gemacht wird, zeigt der Inspektor der Komponente zur Entwurfszeit eine Fehlermeldung an, und die Auftrieb funktioniert zur Laufzeit nicht:
Das Beispiel-Shaderdiagramm BasicWavyWaterSurface
kann während der Inhaltsentwicklung als Stand-In und als Ausgangspunkt für Ihre eigenen Shaderentwicklungen dienen. Alternativ können Sie einen vorhandenen Wasseroberflächen-Shader verwenden, den Fragmentpfad beibehalten und nur den Vertexpfad ersetzen.
Überschreibt die standardmäßige maximale Winkelgeschwindigkeit eines Physikalischen Körpers.
Das Physikmodul lässt es nicht zu, dass der starre Mensch diese Winkelgeschwindigkeit überschreitet. Dies kann nützlich sein, um entweder die Rollgeschwindigkeit eines bestimmten Starrkörpers zu begrenzen oder es zu ermöglichen, schneller als die physikalische Standardeinstellung zu rollen, was 50 Bogenmaße pro Sekunde ist (ca. 8 Revolutionen pro Sekunde).
Die maximale Winkelgeschwindigkeit muss in Bogenmaß pro Sekunde eingegeben werden. Der eingegebene Wert wird auch in Grad pro Sekunde angezeigt (180 Grad ≈ 3,14 Bogenmaß) und Revolutionen pro Sekunde (1 Revolution = 360 Grad ≈ 6,28 Bogenmaß).
Ermöglicht die Beschleunigung/Verlangsamung eines Starrkörpers, bis es eine Geschwindigkeit erreicht, die innerhalb eines zulässigen Bereichs liegt.
Diese Komponente steuert die Größe der Geschwindigkeit und behält die aktuelle Richtung bei. Sollte das Objekt noch vorhanden sein, wählt es eine zufällige Richtung für die Dauer eines Frames aus. Es gibt zwei Betriebsmodi:
Einstellungen:
Richtet den Textkörper an der angegebenen Achse aus.
Diese Komponente fügt dem Körper Drehmoment hinzu, um ihn an eine bestimmte Richtung auszurichten. Beachten Sie, dass das Drehmoment immer in die Richtung angewendet wird, in der der Körper in Richtung des Ziels gedreht wird. Es gibt zwei Betriebsmodi:
Einstellungen:
Ermöglicht die Lenkung eines starren Körpers, bis die Geschwindigkeit eine Zielrichtung erreicht.
Diese Komponente steuert nur die Richtung der Geschwindigkeit und hält die aktuelle Geschwindigkeit. Es gibt zwei Betriebsmodi:
Einstellungen:
Gibt dem Körper eine magnetische Eigenschaft, die andere Körper anzieht oder abkehrt.
Damit diese Komponente funktioniert, muss sie an einen oder mehrere Kollidierungen angefügt werden. (Diese Kollidierungen können auch in der Transformationshierarchie unterhalb der GameObject
angefügten Komponente geschachtelt werden.) Jeder Kollider zeigt eine Kraft auf anderen Starrbodies, die nahe genug zu diesem Kollidieren sind.
Einstellungen:
Erstellt eine Explosion, die bewirkt, dass sich alle Körper innerhalb eines bestimmten Radius nach außen bewegen.
Die Explosionskraft hängt von der Masse eines Starrkörpers ab (und potenziell der Abstand vom Explosionszentrum).
Einstellungen:
Erstellt eine Explosion, die bewirkt, dass alle Körper innerhalb eines Triggers in eine bestimmte Richtung verschoben werden.
Die Explosionskraft hängt von der Masse eines starren Menschen ab. Damit diese Komponente funktioniert, muss sie an einen Trigger-Kollidder angefügt werden. Alle Körper innerhalb des Trigger-Kollidierens sind betroffen.
Einstellungen:
Stabilisiert das Einschränkungssystem, indem er den Trägheits-Tensor des Starrkörpers anpasst.
Das Skript arbeitet an allen Untergeordneten mit der starren oder gelenkten Komponente.
Einstellungen:
Erstellt eine springende Oberfläche, die bewirkt, dass alle kollidierenden Objekte mit einer vordefinierten Geschwindigkeit abspringen.
Einstellungen:
Versetzt die Massemitte eines Starrkörpers.
Einstellungen:
Alle Starrbodies in der Hierarchie unter dieser Komponente werden nicht mit Clients synchronisiert. Dieses Skript sollte starrenBodies hinzugefügt werden, deren Positionen oder Drehungen über ein visuelles Skript oder eine Animation festgelegt werden.
Erfahren Sie mehr über Gitter-Ereignisknoten für visuelle Skripts.
Berechnet die zukünftige Position des Starrkörpers im freien Raum unter dem Einfluss der Schwerkraft.
Einstellungen:
Wenn diese Komponente durch ein visuelles Skript ausgelöst wird, wird die Position und Drehung aller physikalischen Körper auf derselben Transformation oder untergeordneten Transformationen auf ihre Anfangswerte zurückgesetzt.
Einstellungen:
Für visuelle Skripts verfügbare Funktionen
Schulung
Modul
In diesem Modul erfahren Sie, wie Sie Objekte in einer Szene platzieren und mithilfe von Solvern nachverfolgen.
Dokumentation
Erkunden der Gitterphysik in Beispielprojekten - Microsoft Mesh
Anleitung zur Verwendung der Gitterphysik beim Erstellen von Umgebungen für Gitter.
Übersicht über Gitterphysik - Microsoft Mesh
Lesen Sie eine Übersicht über die Verwendung der Gitterphysik beim Erstellen von Umgebungen für Gitter.
Mit Interagierbaren greifen, halten und auslösen - Microsoft Mesh
Erfahren Sie, wie Sie Interaktionen zwischen Avataren und Objekten mithilfe von Komponenten und Skripts erstellen, halten und auslösen.