Leitfaden für Gitterphysikprogrammierer
Allgemeine Tipps
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.
Entwickeln erweiterter Gitterphysik-Inhalte
Animationen für die automatische Wiedergabe
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
- "Automatisch wiedergeben" aktiviert.
- Animieren Von Physik empfohlen (aber nicht erforderlich), wenn sich die Animation auf Kollidierungen auswirkt, die mit physikalischen Körpern interagieren.
- Culling Type set to "Always Animate" (automatically enforced by Mesh Physics), because the animation might affect physics bodies even when they're off-screen.
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".
Komponenten
Wenn Sie einem Objekt eine der folgenden MonoBehaviour
Komponenten hinzufügen, wird diesem Objekt das spezifische Verhalten hinzugefügt.
Klebkörper
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
- Stick: Definiert, ob der Textkörper an dynamischen oder/und statischen Körpern festhält.
- Wann: Manchmal möchten Sie einen schnellen Körper halten, wenn er nur einen anderen Körper berührt, und manchmal möchten Sie einen Körper halten, wenn es für eine bestimmte Zeit gegen einen anderen Körper gehalten wird, z. B. warten, bis kleben, um zu erhärten, wenn Sie eine Taste an einer Wand kleben.
- Kollisionskontrolle Zum Deaktivieren bestimmter Kollisionen zwischen einem Körper und einem anderen. Normalerweise können/sollten Sie Kollisionsebenen verwenden. Da es jedoch nur 32 hartcodierte Kollisionsebenen in Microsoft Mesh gibt, ist dies möglicherweise keine Option. Hier können Sie bestimmte Körper deaktivieren.
- Betroffene Körper für Kollisionskörperfilter , der für die Kollisionskontrolle angewendet wird.
Einschlussfeld
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.)
Geschwindigkeitsvektorfeld
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:
- Wenn sie an einen starren Körper angefügt ist, wird dieser starre Mensch kontrolliert.
- Wenn sie an einen Trigger kollidieren, werden alle starren Körper, die in dieses Triggervolumen gelangen, betroffen.
Einstellungen:
- Der Geschwindigkeitstyp definiert, ob wir an linearer oder Winkelgeschwindigkeit arbeiten.
- Die Richtung im lokalen Raum definiert, ob die Zielgeschwindigkeit im lokalen Bereich des Objekts angegeben wird, an das die Komponente angefügt ist.
- Die Zielgeschwindigkeit legt den gewünschten Geschwindigkeitsvektor in Metern/Sekunde (oder Bogenmaß/Sekunde im Falle der Winkelgeschwindigkeit) fest.
- Die maximale Beschleunigung definiert die maximale Beschleunigung, die auf die Zielgeschwindigkeit angewendet wird.
- Der Beschleunigungstyp definiert eine Art von Beschleunigung, um eine Zielgeschwindigkeit zu erreichen.
- Sofort erreicht die Zielgeschwindigkeit sofort (identisch mit konstanter Beschleunigung mit max. Beschleunigung = Infinity).
- Konstante Beschleunigung stellt sicher, dass der Textkörper die Zielgeschwindigkeit erreicht, unabhängig davon, was innerhalb der Grenzen der Einstellung "Maximale Beschleunigung " liegt.
- Der reibungslose Ansatz reduziert die Beschleunigung, um die Zielgeschwindigkeit zu erreichen. Dies bedeutet, dass Sie in der Praxis niemals die Zielgeschwindigkeit erreichen werden. Sollte es auch einen äußeren Einfluss geben, z. B. bergauf oder bergab, wird dieser zusätzliche Einfluss nicht vollständig überschrieben, was dazu führt, dass es schneller bergab geht als bergauf.
- Betroffene Körper definieren optionale Filterbedingungen für die von dieser Komponente betroffenen Körper. (Standardmäßig sind alle Körper betroffen.)
Skaliertes Schwerkraftfeld
Ä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:
- Wenn die Schwerkraft kleiner ist als das, was wir gewohnt sind (Objekte sind langsamer, wenn sie fallen), nimmt der Spieler sich als größer an – wie ein Riesen.
- Wenn die Schwerkraft größer ist als das, was wir gewohnt sind (Objekte sind schneller, wenn sie fallen), nimmt sich der Spieler selbst als kleiner wahr – wie eine Maus.
Einstellungen:
- Gravity Preset ermöglicht die Auswahl mehrerer interessanter und nützlicher Voreinstellungen für die Gravity Scale-Eigenschaft : verschiedene Himmelskörper (Mond, Mars, Erde, Saturn), keine Schwerkraft (Außenraum) oder umgekehrte Schwerkraft (Upside Down). Sie können die Schwerkraftskala immer mit jedem beliebigen Wert überschreiben.
- Die Schwerkraftskalierung legt die lokale Schwerkraft innerhalb des Triggervolumens in Bezug auf die Standardphysik schwerkraft fest, die sich auf die Szene auswirkt. Die Standardschwere der Schwerkraft von 1 lässt die Schwerkraft unberührt; größere Werte erhöhen die Schwerkraft; 0 entfernt Schwerkraft; negative Werte schalten die Richtung der Schwerkraft um.
- Betroffene Körper definieren optionale Filterbedingungen für die von dieser Komponente betroffenen Körper. (Standardmäßig sind alle Körper betroffen.)
Orbitale Schwerkraftfeld
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.
Auftriebsfeld
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.
Buoyancy Colliders
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:
- Dichte ist die Dichte der simulierten Flüssigkeit, die das Auslöservolumen in Kilogramm pro Kubikmeter "füllt". (Die Standardeinstellung stellt die ungefähre Wasserdichte bei Raumtemperatur dar.)
- Der Oberflächentyp gibt an, wie die Komponente die Form der Wasseroberfläche beschreibt, um Auftriebskräfte zu berechnen.
- Statische Flach geht davon aus, dass die Wasseroberfläche perfekt planar ist und nie von ihrer Ausgangsposition in der Szene bewegt wird. Die Position und Ausrichtung der Wasseroberfläche wird nur einmal bestimmt, wenn die Szene beginnt. Dies ist die rechengünstigste Option.
- Dynamische Flach geht davon aus, dass die Wasseroberfläche perfekt planar ist, aber ermöglicht, dass sie sich bewegen kann (z. B. kann der Wasserstand steigen oder sinken). Die Position und Ausrichtung der Wasseroberfläche wird einmal pro Rahmen bestimmt.
- Dynamic Flat Per Body unterstützt eine Wasseroberfläche, die nicht planar ist (z. B. kann es wellenförmig sein). Für jeden Starrkörper, der auf der Wasseroberfläche schwebt, wird eine lokale planare Annäherung der Wasseroberfläche unterhalb des Starrkörpers einmal pro Rahmen bestimmt, der dann zur Berechnung der Auftriebskräfte für diesen Starrkörper verwendet wird.
- Betroffene Körper definieren optionale Filterbedingungen für die Körper, die in diesem Auftriebsfeld schweben können. (Standardmäßig sind alle Körper berechtigt.)
- Ziehen Sie den Bewegungswiderstand, wenn der Starrkörper auf das Wasser trifft (mit anderen Worten: Reibungs orthogonal auf die Oberfläche des Körpers).
- Die Hautreibung steuert den Bewegungswiderstand, da der Starrkörper durch das Wasser bewegt wird (d. a. Reibung parallel zur Körperoberfläche).
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:
- Wenn die Masse eines starren Körpers im Vergleich zu seinem Volumen unimplausibisch hoch ist, wird es an den Boden sinken.
- Wenn die Masse eines starren Körpers im Vergleich zu seinem Volumen unimplausibisch niedrig ist (z. B. Unitys
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.
Auftriebswellen
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:
- Wellengitterrenderer verweist auf die
MeshRenderer
Komponente, die das Wasseroberflächengitter rendert.- Material zeigt, welches Material vom Renderer verwendet wird. Dies dient lediglich Informationszwecken.
- Der Shader zeigt an, welcher Shader vom Material verwendet wird. Dies dient lediglich Informationszwecken.
- Die Namen der Waves-Shader-Eigenschaft definieren die Namen der erforderlichen Shadereigenschaften, die vom Shader verfügbar gemacht werden müssen. Auf diese Eigenschaften wird zur Laufzeit von dieser Komponente zugegriffen, um sicherzustellen, dass das Verhalten des Auftriebsfelds mit den Visuellen der Wasseroberfläche auf allen Clients synchronisiert bleibt.
- Skriptgesteuerte Zeit ist der Name einer verfügbar gemachten
float
Shadereigenschaft, die von dieser Komponente ständig aktualisiert wird, wobei ein fortlaufend steigender Zeitraum (gemessen in Sekunden) für alle Clients erfolgt. DerBuoyancyFieldWaves_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. - Wave Speed ist der Name einer verfügbar gemachten
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. - Die Wellenlänge ist der Name einer verfügbar gemachten
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. - Wave Height ist der Name einer verfügbar gemachten
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.
- Skriptgesteuerte Zeit ist der Name einer verfügbar gemachten
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.
Max Angular Velocity
Ü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ß).
Geschwindigkeitsgröße (Feld)
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:
- Wenn sie an einen starren Körper angefügt ist, wird dieser starre Mensch kontrolliert.
- Wenn sie an einen Trigger kollidieren, werden alle starren Körper, die in dieses Triggervolumen gelangen, betroffen.
Einstellungen:
- Der Geschwindigkeitstyp definiert, ob wir an linearer oder Winkelgeschwindigkeit arbeiten.
- Geschwindigkeitsgrenzwerte legen die gewünschten Grenzwerte für mindeste und maximale Geschwindigkeit in Metern/Sekunde (oder Bogenmaß/Sekunde bei Winkelgeschwindigkeit) fest. Wenn die aktuelle Geschwindigkeit unter dem Minimum liegt, wird es beschleunigt, wenn es mehr als das Maximum ist, das der Körper verlangsamt. Wenn die aktuelle Geschwindigkeit bereits innerhalb der Grenzwerte liegt, hat das Skript keine Auswirkung. Um eine bestimmte Zielgeschwindigkeit festzulegen, legen Sie "Minimum" und "Maximum" auf denselben Wert fest.
- Die maximale Beschleunigung definiert die maximale Beschleunigung, die auf die Zielgeschwindigkeit angewendet wird.
- Der Beschleunigungstyp definiert eine Art von Beschleunigung, um eine Zielgeschwindigkeit zu erreichen.
- Sofortiges Erreichen des Geschwindigkeitslimits (Identisch mit konstanter Beschleunigung mit Max Acceleration = Infinity).
- Konstante Beschleunigung stellt sicher, dass der Textkörper die Zielgeschwindigkeit erreicht, unabhängig davon, was innerhalb der Grenzen der Einstellung "Maximale Beschleunigung " liegt.
- Der reibungslose Ansatz reduziert die Beschleunigung, um die Zielgeschwindigkeit zu erreichen. Dies bedeutet, dass Sie in der Praxis niemals die Zielgeschwindigkeit erreichen werden. Sollte es auch einen äußeren Einfluss geben, z. B. bergauf oder bergab, wird dieser zusätzliche Einfluss nicht vollständig überschrieben, was dazu führt, dass es schneller bergab geht als bergauf.
- Betroffene Körper definieren optionale Filterbedingungen für die von dieser Komponente betroffenen Körper. (Standardmäßig sind alle Körper betroffen.)
Feld ausrichten
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:
- Wenn sie an einen starren Körper angefügt ist, wird dieser starre Mensch ausgerichtet.
- Wenn sie an einen Trigger kollidieren, werden alle starren Körper, die dieses Triggervolumen betreten, ausgerichtet.
Einstellungen:
- Starrkörperachse legt die Achse des betroffenen Starrkörpers fest, der an das Ziel ausgerichtet werden soll.
- Der Ausrichtungsmodus bietet verschiedene Modi zum Angeben der Zielausrichtung:
- Geben Sie im globalen Raum die Zielausrichtung im globalen Raum an.
- Geben Sie im lokalen Raum die Zielausrichtung im lokalen Raum an (nur mit Triggervolume sinnvoll).
- Richtung der Geschwindigkeit , um den Körper an seine lineare Geschwindigkeit auszurichten.
- To Game Object to align the body to a target gameobject.
- Die Zielausrichtung legt die Zielrichtung der Ausrichtung fest. (Nur wenn Der Ausrichtungsmodus ist auf " Globaler Raum " oder "Im lokalen Raum" festgelegt.)
- Das Zielspielobjekt legt die Zielrichtung der Ausrichtung fest. (Nur wenn Der Ausrichtungsmodus ist auf "Richtung Spielobjekt" festgelegt.)
- Der Drehmomentmultiplikator skaliert das angewendete Drehmoment, um die Zielausrichtung zu erreichen; ein höherer Multiplikator dreht den Körper schneller (zwischen 1 und 1000).
- Dämpfungskoeffizient legt den Dämpfungsfaktor (zwischen 0 und 5) fest. Wenn er unter 1 festgelegt ist, kann der Körper um die Zielausrichtung schwingen.
- Betroffene Körper definieren optionale Filterbedingungen für die von dieser Komponente betroffenen Körper. (Standardmäßig sind alle Körper betroffen.)
Geschwindigkeitsrichtungsfeld
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:
- Wenn sie an einen starren Körper angefügt ist, wird dieser starre Mensch kontrolliert.
- Wenn sie an einen Trigger kollidieren, werden alle starren Körper, die in dieses Triggervolumen gelangen, betroffen.
Einstellungen:
- Der Geschwindigkeitstyp definiert, ob wir an linearer oder Winkelgeschwindigkeit arbeiten.
- Follow Game Object definiert, ob das Ziel eine vordefinierte Richtung oder eine Richtung zu einem bestimmten GameObject ist. Funktioniert nur für lineare Geschwindigkeit.
- Zieltext (wenn "Spielobjekt folgen" auf "true" festgelegt ist): Legt die gewünschte Follow-Richtung fest.
- Die Zielrichtung legt die gewünschte Richtung fest. Dieser Wert ist normalisiert, sodass die Größe keine Auswirkung hat.
- Die Richtung im lokalen Raum definiert, ob die Richtung in einer lokalen Transformation der Explosion angegeben wird.
- Die maximale Beschleunigung definiert die maximale Beschleunigung, die auf die Zielgeschwindigkeit angewendet wird.
- Der Beschleunigungstyp definiert eine Art von Beschleunigung, um eine Zielgeschwindigkeit zu erreichen.
- Sofort erreicht die Zielrichtung sofort (identisch mit konstanter Beschleunigung mit Max Acceleration = Infinity).
- Konstante Beschleunigung stellt sicher, dass der Textkörper die Zielgeschwindigkeit erreicht, unabhängig davon, was innerhalb der Grenzen der Einstellung "Maximale Beschleunigung " liegt.
- Der reibungslose Ansatz reduziert die Beschleunigung, um die Zielgeschwindigkeit zu erreichen. Dies bedeutet, dass Sie in der Praxis niemals die Zielgeschwindigkeit erreichen. Außerdem wird dieser zusätzliche Einfluss nicht vollständig überschrieben, wenn externer Einfluss wie bergauf oder bergab geht, was dazu führt, dass es schneller bergab geht als bergauf.
- Betroffene Körper definieren optionale Filterbedingungen für die von dieser Komponente betroffenen Körper. (Standardmäßig sind alle Körper betroffen.)
Magnetischer Körper
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:
- Die Stärke definiert die Beschleunigung des Magneten an der Kontaktstelle (wenn der Abstand zwischen Kollidierungen null ist).
- Der Abstand von Einfluss steuert den Bereich der magnetischen Kraft. Magnetische Kraft wird nur angewendet, wenn der kürzeste Abstand zwischen Kollidierungen kleiner ist.
- Feldtyp definiert, wie die magnetische Kraft mit dem Abstand schwächt.
- Konstante geht davon aus, dass die magnetische Kraft unabhängig vom Abstand gleich ist.
- Linear geht davon aus, dass die magnetische Kraft linear von Stärke zu Null fällt (im Abstand des Einflusses).
- Umgekehrt wird eine umgekehrte proportionale Abhängigkeit von der Entfernung angenommen.
- Umgekehrtes Quadrat geht von einer umgekehrten proportionalen Abhängigkeit vom Abstand quadratisch (ähnlich einem echten Magneten) aus.
- Magnetpol steuert, welche Objekte von diesem Objekt angezogen oder abgewehrt werden.
- Nordpol zieht Südpol an und kehrt Nordpol ab.
- Der Südpol zieht nordpol an und kehrt den Südpol ab.
- Magnetisch zieht sowohl den Südpol als auch den Nordpol an.
- Schwerkraft beim Kontakt deaktivieren: Wenn dies aktiviert ist und die Stärke des Magneten zweimal größer als die Schwerkraft ist, ist die Schwerkraft für Körper deaktiviert, die mit diesem Magneten in Kontakt stehen. Eines der Objekte muss statisch sein, damit dies auswirkungen hat. Dies wird häufig verwendet, um das Ziehen von Körpern an einer Wand zu verhindern.
Sphärische Explosion
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:
- Die Stärke definiert die Wirkung der Explosion auf Körper in Metern/Sekunde. Die tatsächliche Geschwindigkeitsänderung ist weniger abhängig vom Explosionstyp und kritischen Masse (siehe unten).
- Der Abstand des Einflusses steuert den Bereich der Explosionskraft.
- Der Feldtyp definiert, wie der Explosionseffekt mit Abstand schwächt.
- Konstante geht davon aus, dass der Effekt unabhängig vom Abstand ist.
- LinearEr Drop geht davon aus, dass der Effekt von maximal bis null (im Abstand des Einflusses) fällt.
- Kritische Masse definiert die Masse des Körpers, die nicht von der Explosion betroffen ist. Schwerere Körper fühlen weniger Wirkung als hellere Körper. Beispielsweise wird ein starrer Mensch, der ein Drittel der kritischen Masse wiegt, zwei Drittel der Geschwindigkeitsänderung spüren.
- Angular Impulse Scale definiert, wo die Kraft angewendet wird. Wenn sie auf 0 festgelegt ist, wird die Kraft in der Mitte der Masse angewendet, was bedeutet, dass keine Drehung erfolgt. Bei Festlegung auf 1 wird die Kraft am nächstgelegenen Punkt der Explosion angewendet.
- Okklusion Wenn aktiviert, fühlen sich Objekte, die hinter anderen Objekten verborgen sind, nicht die Explosion. Nur ein einziger Strahl zwischen der Mitte der Explosion und dem Massenmittelpunkt wird auf Okklusion überprüft.
Richtungsexplosion
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:
- Die Stärke definiert die Wirkung der Explosion auf Körper in Metern/Sekunde. Die tatsächliche Geschwindigkeitsänderung ist weniger abhängig von der kritischen Masse (siehe unten).
- Die Richtung definiert die Richtung der Explosion. Dieser Wert ist normalisiert, sodass die Größe keine Auswirkung hat.
- Die Richtung im lokalen Raum definiert, ob die Richtung in einer lokalen Transformation der Explosion angegeben wird.
- Kritische Masse definiert die Masse des Körpers, die nicht von der Explosion betroffen ist. Schwerere Körper fühlen weniger Wirkung als hellere Körper. Beispielsweise wird ein starrer Mensch, der ein Drittel der kritischen Masse wiegt, zwei Drittel der Geschwindigkeitsänderung spüren.
- Angular Impulse Scale definiert, wo die Kraft angewendet wird. Wenn sie auf 0 festgelegt ist, wird die Kraft in der Mitte der Masse angewendet, was bedeutet, dass keine Drehung erfolgt. Bei Festlegung auf 1 wird die Kraft am nächstgelegenen Punkt der Explosion angewendet.
- Betroffene Körper definieren optionale Filterbedingungen für die von dieser Komponente betroffenen Körper. (Standardmäßig sind alle Körper betroffen.)
Gelenkstabilisierung
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:
- Der Stabilisierungsfaktor definiert, wie viel Sie physische Korrektheit für Stabilität opfern. Beispiel: 1 -> hauptsächlich Physik richtig, 4 -> Kompromiss, 10 -> stabil mit Artefakten.
- Die gemeinsame Projektion ermöglicht die Einschränkungsprojektion für alle untergeordneten Elemente. Dies kann die Stabilität erheblich verbessern, aber opfert körperliche Korrektheit. Es funktioniert nur für konfigurierbare und Zeichengelenke.
- Der Projektionsabstand definiert den maximal zulässigen Verstoß gegen Einschränkungen. Um Physikalische Probleme zu vermeiden, versuchen Sie, diesen Wert so hoch wie möglich festzulegen.
Bouncing Surface
Erstellt eine springende Oberfläche, die bewirkt, dass alle kollidierenden Objekte mit einer vordefinierten Geschwindigkeit abspringen.
Einstellungen:
- Die Unzustellbarkeitsgeschwindigkeit definiert die minimale und maximale Geschwindigkeitsgröße des Objekts nach dem Absprung. Siehe "Unzustellbarkeitseffekt ", um zu erfahren, wie die Richtung bestimmt wird. Legen Sie "Min " und "Max " auf den gleichen Wert fest, wenn Sie eine einzelne Zielgeschwindigkeit angeben möchten.
- Der Unzustellbarkeitseffekt definiert das beabsichtigte Verhalten von Springobjekten.
- Perfekte Unzustellbarkeit: Der Winkel der Eingehenden Geschwindigkeit auf die Kollisionsebene normal ist identisch mit dem Winkel der ausgehenden Geschwindigkeit.
- Set Velocity Magnitude: Der Winkel der ausgehenden Geschwindigkeit auf normal wird durch Reibung beeinflusst.
- Legen Sie die normale Geschwindigkeit fest: ähnlich wie "Set Velocity Magnitude", aber die Unzustellbarkeitsgeschwindigkeit definiert die Größe der Geschwindigkeit senkrecht zur Ebene (normale Geschwindigkeit).
- Bounce Towards Target Body: Die Richtung der ausgehenden Geschwindigkeit wird auf einen Zieltext gerichtet. Wenn diese Option ausgewählt ist, wird die Zieltexteigenschaft angezeigt und muss festgelegt werden.
- Reibung steuert, wie viel Tangentialgeschwindigkeit bei Kollision verloren geht. Bei Festlegung auf 0 behält das Springobjekt die Tangentialgeschwindigkeit bei. Bei Festlegung auf 1 springt das Objekt senkrecht zur Oberfläche (Tangentialgeschwindigkeit ist 0). Bei Werten, die mehr als 1 sind, springt das Objekt rückwärts.
Mitte des Massenoffsets
Versetzt die Massemitte eines Starrkörpers.
Einstellungen:
- Offset in lokalen Koordinaten definiert den Offset in lokalen Koordinaten.
Lokaler Physikbereich
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.
Wurfbahn
Berechnet die zukünftige Position des Starrkörpers im freien Raum unter dem Einfluss der Schwerkraft.
Einstellungen:
- Starrkörpermodus: Bei Festlegung auf "true" werden die Starrkörperposition und -geschwindigkeit als Ausgangsbedingungen verwendet. Ermöglicht die Berechnung der zukünftigen Position in Echtzeit.
- Starrer Mensch (gilt nur, wenn der Starrkörpermodus auf "true" festgelegt ist).): Definiert, welcher starre Mensch genommen wird.
- Initial Velocity: (gilt nur, wenn der Starrkörpermodus auf "false" festgelegt ist): Definiert die Anfangsgeschwindigkeit. Die Anfangsposition wird von der Position des GameObjects genommen, an das diese Komponente angefügt ist.
- Maximale Anzahl von Punkten: Definiert die maximale Anzahl berechneter Punkte.
- Zeitschritt: Definiert den Zeitunterschied zwischen den zukünftigen Positionen.
- Schwerkraft: Dies ist die Gravitationsbeschleunigung.
- Zeilenrenderer: Gibt den Zeilenrenderer an, in den die Position von Punkten kopiert wird. Dadurch wird die Wurfbahn angezeigt.
Zurücksetzen von Textkörpertransformationen
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:
- Initial Auto Save: If selected, use the transforms at environment startup as the reset transforms. Wenn sie nicht ausgewählt sind, müssen Sie ein visuelles Skript verwenden, um die Funktion "Textkörpertransformationen jetzt speichern" aufzurufen, um Zurücksetzungstransformationen zu speichern, bevor Sie eine Zurücksetzung durchführen.
Für visuelle Skripts verfügbare Funktionen
- Zurücksetzen von BodyTransformationen: Setzt die Position und Drehung aller physikalischen Körper im Bereich dieser Reset Body Transforms-Komponente auf ihre zuletzt gespeicherten Zurücksetzungstransformationen zurück. Rufen Sie dies nur auf einem Client auf.
- "Body Transforms speichern" speichert jetzt die aktuelle Position und Drehung aller physikalischen Körper im Rahmen dieser Reset Body Transforms-Komponente als ihre Zurücksetzungstransformationen. Rufen Sie dies nur auf einem Client auf.