Die Phys_ Entities

Da in der Source-Engine eine Physik-Engine integriert ist, gibt es die Möglichkeit physikalische Simulationen innerhalb von Source darzustellen. Dies ist mithilfe der phys_* Entitys möglich. Mit ihnen kann man Bewegungen von Objekten einschränken oder erweitern oder Objekte mit anderen Objekten verknüpfen. Im Laufe dieses Artikels werden die für die Physik nötigen Entities erklärt.

Wie im reellen Leben werden Objekte mit anderen Objekte mit Hilfe von verschiedensten Gelenken und anderen Arten von Beschränkungen verknüpft. Türen zum Beispiel werden über Schaniergelenke im Türrahmen gehalten und ermöglichen nur die Drehung um eine Achse. Unser Arm ist mithilfe eines Kugelgelenks mit der Schulter verbunden, was eine Drehbewegung auf allen 3 Achsen ermöglich. Das Funktionsprinzip innerhalb der Source-Engine ist ähnlich, nur das diese Beschränkungen und Gelenke mithilfe von bestimmten Entities realisiert werden.

phys_constraint

Das einfachste Entity, um andere Objekte zu beschränken. Dieses Enity verbindet ein Entity mit einem anderen, als wären sie mit Nägeln oder Schrauben verbunden. In den Einstellungen des phys_constraint gibt es zwei Angaben für die Entities, die verbunden werden sollen. Ist eines der Entities frei, wird das angegebene Entity mit dem origin des phys_constraint verbunden. Diese Möglichkeit wird am häufigsten benutzt, um Objekte mit der Welt zu verknüpfen. Wie bei allen Constraints kann man hier ein bestimmtes Limit angeben, bevor die Verbindung reisst. Bei genug aufgebrachtem Schaden deaktiviert sich das Entity und feuert ggf. ein Output, mit dem man weitere Sachen triggern kann.

Beispielmap: sdk_phys_constraint.vmf

phys_ballsocket

Das phys_ballsocket ist ein Kugellager, das genauso wie die Verbindung zwischen Arm und Schulter funktioniert. Dieses Constraint ist an einem anderen fixiert und rotiert kugelförmig um diesen Punkt. Zum Beispiel kann dieses Entity für die Verknüpfung eines Seils und ein Objekt aus der Welt verwendet werden.

Beispielmap: sdk_phys_ballsocket.vmf

phys_hinge

Das phys_hinge funktioniert wie das Schanier einer Tür. Dieses Objekt schränkt ein anderes ein, sich nur in eine Richtung bewegen zu können. Diese Richtung ist mithilfe des Helper Tool im Hammer abrufbar.

Beispielmap: sdk_phys_hinge.vmf

phys_lengthconstraint

Das phys_lengthconstraint erhält die Entfernung zwischen zwei Entities aufrecht. Wenn die Flag Keep Rigid aktiv ist, kann man das Ergebnis mit der Funktionsweise einer Stange vergleichen. Wenn diese Flag nicht aktiv ist, ist das System ein wenig beweglicher.

Beispielmap: sdk_phys_lengthconstraint.vmf

phys_pulleyconstraint

Das phys_pulleyconstraint arbeitet wie zwei lengtconstraint zusammen. Um das zu verdeutlichen: Bewegt man das erste Objekt, bewegt sicht das 2. mit um die Länge aufrecht zu erhalten.

Beispielmap: sdk_phys_pulleyconstraint.vmf

phys_convert

Manchmal ist es notwendig ein Objekt komplett statisch zu belassen bis ein bestimmtes Ereignis auftritt. Zum Beispiel soll eine Steinschicht auf den Spieler einstürzen, nachdem ein gewisses Ereignis abgelaufen ist. Man könnte dafür ein phys_constraint verwenden, aber mithilfe des phys_convert ist das ganze fehlerfreier. Das phys_convert verändert statische Entities in physische. Ein prop_static wird dadurch zu einem prop_physics, und ein func_brush wird zu einem func_physbox. Weil diese Objekte bis zu der Veränderung statische Objekte sind, verbrauche sie in der Engine auch viel weniger ressourcen als wenn sie mithilfe eines anderen Constraint-Entities verbunden wären.

Beispielmap: sdk_phys_convert.vmf

phys_ragdollconstraint

Funktioniert wie ein normales phys_constraint aber für Ragdolls.

Beispielmap: sdk_phys_ragdollconstraint.vmf

phys_slideconstraint

Dieses Constraint erlaubt die Bewegung auf einer Achse. Wie die kleinen Ringe eines Duschvorhangs, die sich auf der Stange hin- und herbewegen. Ähnlich des phys_hinge wird die Richtung mithilfe von Helpern angegeben

Beispielmap: sdk_phys_slideconstraint.vmf

phys_keepupright

Dieses Constraint lässt jedes Objekt nur in eine Richtung bewegen. Je größer der Wert Angular Limit ist, umso stärker behält das Objekt seine Position.

Beispielmap: sdk_phys_keepupright.vmf

phys_spring

Das phys_spring arbeitet wie eine Feder. Die Einstellung Length gibt an, wie lang die Feder ist, wenn nichts an ihr befestigt ist. Wenn etwas an die Feder gehängt wird, wird sie länger. Die Stärke wird durch den Wert Sprint Constant festgelegt..

Beispielmap: sdk_phys_sprint.vmf

phys_magnet

Das phys_magnet funktioniert wie ein Magnet, das metallische Objekte anzieht wenn sie in die Nähe kommen.

Beispielmap: sdk_phys_magnet.vmf

phys_motor

Das phys_motor Entity versucht ein Objekt in einer gewissen Geschwindigkeit zu bewegen. Die Geschwindigkeit bleibt gleich, es sei denn das zu bewegende Objekt gibt Widerstand (durch eine Kollision o.ä). Dann wird die Geschwindigkeit erhöht, um das Objekt weiterhin bewegen zu können.

Beispielmap: sdk_phys_motor.vmf

phys_ragdollmagnet

Ein Magnet für Ragdolls. Mithilfe dieses Entity können dramatischere Szenen mit Leichen erstellt werden.

Beispielmap: sdk_phys_ragdollmagnet.vmf

phys_thruster

Das phys_thruster übt eine Kraft in eine bestimmte Richtung aus. Vergleichbar mit dem Antrieb einer Rakte, welches den Sprengkopf in eine Richtung bewegt. Mithilfe der Einstellungen kann eine bestimmte Dauer angegeben werden, bevor der Schub wieder aufhört

Beispielmap: sdk_phys_thruster.vmf

phys_torque

Ähnlich wie das phys_motor entity, übt das phys_torque eine Rotationsbeschleunigung auf ein Objekt aus. Allerdings kann hierbei das Gewicht des angehängten Objekts ignoriert werden.

Beispielmap: sdk_phys_torque.vmf

Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
half-life_2/tutorials/die_phys_entities.txt · Zuletzt geändert: 2011/04/21 18:25 von Adrian_Broher