Working Ladders

From Valve Developer Community
< De
Jump to navigation Jump to search
English (en)Deutsch (de)Español (es)한국어 (ko)Polski (pl)Русский (ru)中文 (zh)Translate (Translate)
Level Design

In allen Source Source-Spielen (mit wenigen Ausnahmen) besteht eine Leiter im Spiel aus dem Prop oder dem Brush, die der Spieler als Leiter wahrnimmt, und dem unsichtbaren Entitäts-/Brushsystem davor, das die Leiter tatsächlich erklimmbar macht. Dies erweckt die Illusion, dass der Spieler die sichtbare Leiter erklimmt, wo er tatsächlich die unsichtbare Leiterentität/den Brush direkt davor erklimmt. Um die sichtbare Leiter zu erstellen, können Sie entweder verwenden:

  • prop_static(en) Entität mit einem Leitermodell (wie models\props_c17\metalladder001.mdl)
  • brush(en) mit einer Leitertextur (wie metal/metalladder001a).

Das Klettersystem der Leiter hängt davon ab, für welches Source-Spiel es bestimmt ist. Leitern in Half-Life 2 und Half-Life 2: Deathmatch werden ein wenig anders erstellt als die früherer Spiele, um sowohl dem Level-Designer als auch dem Spieler eine bessere Kontrolle zu bieten, während Leitern in Counter-Strike: Source und Day of Defeat: Source dies tun implementiert ziemlich genau die gleiche Weise wie die älteren Spiele.

Leiterentitäten

Erstellen der Leiter

Verwendet in: Half-Life 2 Half-Life 2, SiN SiN, Dark Messiah of Might and Magic Dark Messiah of Might and Magic


Um eine Leiter zu erstellen, müssen Sie das Volumen definieren, in dem sich der Spieler auf der Leiter durch den Raum bewegt. Dieses Volume kann auf zwei Arten definiert werden: Mit der Entität func_useableladder(en) oder mit der veralteten Entität func_ladderendpoint(en) (die unten nur kurz beschrieben wird, um die Funktionsweise älterer Karten zu verstehen).

Die Entität func_useableladder kann in zwei Unterentitäten unterteilt werden: einen Startpunkt und einen Endpunkt „(siehe Fig. 1a)“. Ihre Positionen können in die Schlüsselwertfelder eingegeben werden, oder typischerweise kann das Leitervolumen mit dem visuellen Leiterwerkzeug definiert werden, indem der mittlere Kreis gezogen wird, der sichtbar ist, wenn die Entität ausgewählt ist (siehe Abb. 1b). Mit diesem Werkzeug können Sie den Anfangs- und Endpunkt der Leiter an geeignete Positionen in der 2D-Ansicht ziehen. Der Start- und Endpunkt der Leiter kann von beliebiger Orientierung und Länge sein (siehe Fig. 1c). Ziehen Sie einfach die Endpunkte dorthin, wo Sie sie haben möchten, und der Spieler bewegt sich zwischen diesen Punkten, während er sich auf der Leiter befindet.

Fig. 1a - Leiterpunkte
Fig. 1b - Orientierung ändern
Fig. 1c - Schräge Leiterpunkte

Stellen Sie beim Platzieren der Endpunkte sicher, dass Sie sie ein paar Einheiten von der sichtbaren Leiterbürste (oder einer anderen Bürste oder einem anderen Modell) entfernt platzieren, denn wenn vier Seiten des Leitervolumens sogar eine Oberfläche einer Bürste oder eines berühren Modell, wird dieser Teil des Leitervolumens nicht besteigbar.

Die jetzt veraltete Entität func_ladderendpoint besteht nur noch aus einem einzigen Endpunkt. Ein Ladder-Volume wird erstellt, indem zwei func_ladderendpoints mithilfe ihrer Eigenschaften miteinander verknüpft werden. Ein Ladder-Volume wird zwischen zwei func_ladderendpoints erstellt, indem einer der Endpunkte benannt wird und der andere Endpunkt auf seinen Namen in seinem „Other“-Wert zeigt. (Es ist nicht erforderlich, dass der zweite Endpunkt auf den ersten zurückzeigt, wie in den Eigenschaften angegeben.)

Steigt ab

Fig. 2 - Abstieg

Neben dem Bewegungsvolumen können Sie auch Abstiegspunkte für die Leiter (siehe Abb. 2) bereitstellen, um ein einfacheres und kontrollierteres Absteigen zu ermöglichen. Diese Punkte werden mit der Entität info_ladder_dismount(en) markiert. Während er sich neben und gegenüber einer dieser Markierungen befindet, kann der Spieler seine Benutzungstaste drücken, um zur Position der Markierung abzusteigen (normalerweise, wenn Leitern zwischen mehr als zwei Stockwerken verlaufen). Wenn er eines der Enden der Leiter erreicht hat, kann er auch einfach von der Leiter heruntersteigen, indem er sich einer der Markierungen in der Nähe zuwendet und vorwärts geht. Sie können mehrere info_ladder_dismount-Markierungen für jede Abstiegsstelle verwenden, um weitere Anweisungen zum Verlassen der Leiter bereitzustellen.

Um mögliche Verwechslungen zwischen Leitern in der Nähe zu vermeiden, die unterschiedliche Abstiegsmarkierungen verwenden, hat jede info_ladder_dismount-Entität einen Eigenschaftswert namens „LadderName“, der verwendet werden kann, um den Namen der Leiter zu enthalten, zu der sie gehört.

Wie das Leitervolumen müssen die Abstiegspunkte frei von Hindernissen sein und es dem Spieler ermöglichen, an seiner Position zu stehen, ohne die Festkörpergeometrie zu schneiden.

Tests im Spiel

Sobald Sie Ihre Leitern erstellt haben, können Sie Ihre Karte zusammenstellen und testen. Wenn Sie möchten, können Sie die Ladder-Entitäten auch im Spiel zusammen mit einigen Debug-Informationen anzeigen, indem Sie die Konsole öffnen und sv_showladders 1 eingeben, um dies zu aktivieren, und dann laden oder neu laden (indem Sie restart) die Karte, die Sie anzeigen möchten. Dies zeigt Ihnen alle Start- und Endpunkte der Leitern (func_useableladder- und func_ladderendpoint-Entitäten) sowie die Abstiegspunkte (info_ladder_dismount-Entitäten) „(siehe Abb. 3a)“ und kann Ihnen helfen, festzustellen, ob diese Entitäten vorhanden sind korrekt eingerichtet ist, ob Leiterentitäten mit der Solid-World-Geometrie oder dem Requisitenmodell der Leiter selbst kollidieren (siehe Fig. 3b) und welche func_ladderendpoint-Entitäten miteinander verbunden sind.

Fig. 3a - Visualisierung im Spiel
Fig. 3b - Endpunkt steckt im Boden fest

Wie Leitern im Spiel funktionieren

Der sicherste Weg, eine Leiter zu besteigen, besteht darin, sich ihrem unsichtbaren Leitervolumen zu nähern und in Reichweite die Benutzungstaste zu drücken. Dadurch werden Sie automatisch auf der Leiter positioniert. (Sie können auch in das Leitervolumen gehen, mit größerer Gefahr, es zu verpassen und in ein Loch zu fallen.)

Um von einer Leiter abzusteigen, können Sie jederzeit entweder abspringen oder Ihre Benutzungstaste drücken. Wenn die Leiter über info_ladder_dismounts verfügt, können Sie auch einfach von ihren Endpunkten absteigen, und wenn Sie Ihre Benutzungstaste drücken, während Sie sich neben und vor einem info_ladder_dismount befinden, können Sie überall auf der Leiter kontrollierter absteigen.

Brushleitern

Objektbrush-basierte Leitern

Fig. 4 - func_ladder(en) texturiert mit tools/toolsinvisibleladder vor einer prop_static(en)-Leiter.
Beispiel einer Leiterspitze, die zur Seite hin absteigt, was zeigt, dass sich die Spitze der Leiter 56 Einheiten über der neuen Etage befindet, auf die Sie absteigen.

Verwendet in: Left 4 Dead Left 4 Dead, Left 4 Dead 2 Left 4 Dead 2, Counter-Strike: Source Counter-Strike: Source, Day of Defeat: Source Day of Defeat: Source, Garry's Mod Garry's Mod, Vampire: The Masquerade - Bloodlines Vampire: The Masquerade - Bloodlines, The Ship: Murder Party The Ship: Murder Party


Erstellen Sie einen weiteren Brush vor dem Objekt/Brush, auf das Sie klettern möchten, so nah wie möglich daran, aber ohne es zu berühren. Stellen Sie sicher, dass die Wand die gleiche Breite/Höhe wie das bekletterbare Objekt hat. Weisen Sie diesem Brush das Material tools/toolsinvisibleladder zu und binden Sie es dann an eine Entity Strg+T. Wählen Sie func_ladder(en) aus dem Objekteigenschaften-Dialog. Sie haben jetzt eine kletterbare Fläche, die sich vor dem Objekt / Brush befindet. Auf einer Leiter in CS:S wird Ihre Schussgenauigkeit erheblich reduziert.

Leitern können auch seitlich demontiert werden. Zum Beispiel: Klettern auf eine Leiter, die auf der linken Seite der Leiterprop absteigt, im Gegensatz zum Klettern über die func_ladder-Brush.
Bei diesen Leitern sollte sich die Leiterbürste etwa 56 Einheiten über dem Boden erstrecken, auf den sie absteigen wird, aber kein Dach über der Leiter berühren.
Wenn die func_ladder nicht hoch genug reicht, können Sie nicht auf den Boden absteigen und fallen stattdessen herunter. Wenn die func_ladder zu nahe an ein Dach oder eine festen Prop darüber kommt, bleibt die KI an diesem Dach/Prop, weil die KI immer ganz nach oben auf eine Leiter klettert und nicht darüber nachdenkt, wann das Absteigen am sinnvollsten ist.

Note.pngHinweis: Leitern für nur Infizierte(en) in die Left 4 Dead-Serie verwendet die 'tools/climb_versus'-Textur, siehe auch wie man Leitern für die Left 4 Dead-Serie erstellt.(en)
Note.pngHinweis: Vampire Bloodlines-Leitern verwenden die Textur „tools/toolsinvisible“.
Note.pngHinweis: Ähnliche Leitern werden in Half-Life Half-Life verwendet, aber hier wird stattdessen die 'AAATRIGGER'-Textur verwendet.
Note.pngHinweis: Sich berührende Leitern werden zu einer einzigen Leiter zusammengelegt. Wenn Sie die Navigation auf einer Leiter blockieren müssen, würde dies die Navigation auf beiden Leitern blockieren. Fügen Sie Lücken zwischen Leitern hinzu.
Icon-Bug.pngFehler: Wenn die Brushs eine Wasseroberfläche überquert, kann der damit interagierende Spieler ein seltsames Verhalten zeigen und den Spieler im Wasser zum Ende der Leiter teleportieren. Dies wurde bei einem teilweisen Eintauchen der Leiterbrush festgestellt.  [todo tested in?]
Zu erledigen: Unter welchen Umständen genau passiert es?

Nicht-Objektbrushbasierte Leitern

func_detail(en) texturiert mit 'tools/toolsinvisibleladder' vor einer prop_static(en)-Leiter.

Verwendet in: Counter-Strike: Global Offensive Counter-Strike: Global Offensive, INFRA INFRA


Dieser Leitertyp wird genau so eingerichtet und funktioniert wie Objektpinselleitern, darf jedoch nicht an eine func_ladder-Entität gebunden werden, da die Leiter sonst im Spiel nicht vorhanden ist. Erstellen Sie dazu einen Brush vor dem Objekt / Brush, auf das Sie klettern möchten, so nah wie möglich daran, aber ohne es zu berühren.

Stellen Sie sicher, dass das Gesicht die gleiche Breite/Höhe wie das besteigbare Objekt hat und weisen Sie diesem Brush dann das Material 'tools/toolsinvisibleladder' zu. Sie haben jetzt eine kletterbare Fläche, die sich vor dem Objekt / Brush befindet. Es ist keine weitere Einrichtung erforderlich, damit Ihre Leiter im Spiel funktioniert.

Note.pngHinweis: Seit 'tools/toolsinvisibleladder' immer noch Visleafs(en) schneidet, achten Sie darauf, die Leiterbürste an func_detail(en) zu binden.
Tip.pngTipp: 'tools/toolsinvisibleladder' lässt den gesamten Brush wie eine Leiter wirken, selbst wenn er sich nur auf einer Seite des Brushes befindet. Andere Flächen des Brushes zeigen weiterhin ihre Texturen im Spiel.

Brush based ladder workaround

Verwendet in: Team Fortress 2 Team Fortress 2, Portal 2 Portal 2

Einige Source-Spiele unterstützen die Standard-Leiterentität nicht, es ist jedoch möglich, eine Leiter vorzutäuschen, indem eine sehr schmale Treppe erstellt wird.

Erstellen Sie zunächst ein prop_static und setzen Sie das Weltmodell auf models/props_c17/metalladder002.mdl. Wenn Sie mit diesem bestimmten Modell nicht zufrieden sind, öffnen Sie den Modellbrowser und geben Sie Ladder ein, um nach einigen zu suchen. Es gibt einige verschiedene Modelle. Sie können auch eine Leiterstütze aus Brushs erstellen oder die Leiterstruktur auf einer einzelnen Brushfläche verwenden.

Erstellen Sie als Nächstes einen 16 Einheiten hohen Brush mit der Player-Clip-Textur. Verwenden Sie die Player-Clip-Brushs, um einen Stapel von Blöcken zu bilden, und stellen Sie sicher, dass jeder höhere Block eine Einheit "hinter" dem niedrigeren liegt. Die Spieler werden diese 16 Einheiten hohen Brushs als Treppe erklimmen. Um zu verhindern, dass sie zu weit nach außen gehen, sobald Sie den Boden erreicht haben, wählen Sie die No-Clip-Blöcke aus, gruppieren Sie sie und komprimieren Sie sie dann, solange die oberste Stufe über die Stelle hinausragt, an der die Stütze endet, und jeder Block noch eine kleine Lippe hat, wird es gut funktionieren . Da haben Sie es eine gut aussehende Kletterleiter.

Note.pngHinweis: Diese Leitern haben keinen Klettersound.

Video zeigt, wie man es erstellt: TF2 mapping: Ladders in TF2 (Englisch)

Zu erledigen:  Fügen Sie ein Bild hinzu, das zeigt, wie Sie diese Art von Leiter in Hammer für TF2 erstellen.

Leitern optimieren

Die Leiter-Requisiten verwenden, wie alle prop_static, standardmäßig VPhysics(en) für die Kollisionserkennung, was detailliertere physikalische Kollisionen liefert, aber in einigen Fällen ist dies möglicherweise nicht vorzuziehen. In Multiplayer-Karten und sehr ressourcenintensiven Karten kostet die Verwendung von VPhysics-Requisiten wertvolle Ressourcen, und Sie möchten möglicherweise gute Physik opfern, um potenzielle Verzögerungen zu vermeiden. Hier sind einige gute Methoden, um die Ressourcenkosten zu minimieren:

  • Wenn die Leiter für HL2 oder HL2:DM ist und die Leiter gerade ist, hängt die beste Methode davon ab, ob jemand in der Lage sein wird, durch die Leiter zu schießen. Wenn dies nicht der Fall ist (z. B. wenn die Leiter an einer Wand steht), können Sie den Schlüsselwert „Collisions“ einfach in „Use Bounding Box“ ändern. Wenn dies der Fall ist, können Sie den Schlüsselwert in „Not Solid“ ändern und stattdessen einen unsichtbaren Clip („Toolsclip“) platzieren, um eine Kollision damit zu erkennen.
  • Wenn Sie eine schräge Leiter für HL2 oder HL2:DM erstellen, dreht sich ein Begrenzungsrahmen nicht mit der Requisite und behindert das Klettersystem Platzieren Sie einen unsichtbaren, gedrehten Clip- (toolsclip) oder Player-Clip- (toolsplayerclip) texturierten Brush neben der Leiter (abhängig davon, ob jemand in der Lage sein wird, durch sie hindurchzuschießen).
  • Wenn die Leiter für eine CS:S- oder DoD:S-Karte bestimmt ist, können Sie den Schlüsselwert „Kollisionen“ in „Nicht solide“ ändern und dafür sorgen, dass der func_ladder-Brush die Leiterstütze bedeckt und sie bei Bedarf dreht.

In Multiplayer-Karten ist es auch eine selbstverständliche Erwartung, sich parallel zur Oberfläche, die eine Leiter bedeckt, frei bewegen zu können. Wenn es um bürstenbasierte Leitern geht, können Sie davonkommen, indem Sie die Leiterbürste in eine nicht feste func_brush(en) verwandeln, um zu vermeiden, dass Spieler vorübergehend an der Seite der Leiter "stecken bleiben", aber wenn es um Requisitenleitern geht, Sie ragen oft zu weit aus der Wand heraus, um einen Spieler glaubwürdig erscheinen zu lassen, der in einer Leiter steht. In diesem Fall ist es wahrscheinlich besser, zwei texturierte Player Clip-Keile an den Seiten der Requisite zu verwenden, die den Spieler zur Vorderseite der Requisite führen.

Nicht zuletzt könnten Sie eine Brushleiter in ein func_detail(en) verwandeln, um unnötige Brushblätter zu vermeiden.

Siehe auch