Die Begriffe Skripte und Skripte werden in Game Development Stack Exchange anscheinend synonym verwendet, aber abgesehen vom Lesen von Fragen zur Auswahl einer Skriptsprache verstehe ich die Beziehung zwischen Skripten und Skripten und der Kernsprache nicht. Was macht ein Skript normalerweise, wann würde es verwendet werden, und sind Skripte in bestimmten Kontexten (wie von Spielprogrammierern definiert) anders als eine Skriptsprache?
13
Antworten:
Skripte werden für eine Skriptsprache geschrieben. Die Leute können die Wörter in Slang-Sätzen verwenden, um die Verwirrung zu bekommen, auf die Sie sich beziehen, aber fragen Sie jemanden nach den Definitionen von Script, Scripting und Scripting Language.
Wenn Sie eine Skriptsprache in eine Game-Engine oder Kernsprache einbetten, auf die Sie sich beziehen, legen Sie nicht nur die Objekte in der Game-Engine offen, sondern ermöglichen auch das Schreiben von Logik für die Game-Engine. Eine andere Bemerkung ist, dass dies Ihr Spiel in eine Art virtuelle Maschine verwandelt, da Skriptsprachen nur selten in die Maschinensprache kompiliert werden und stattdessen in eine Form von Byte-Code umgewandelt und zur Laufzeit von Ihrer Game-Engine interpretiert werden.
Dies hat für das Entwicklungsteam einige enorme Vorteile, von denen einige im Folgenden aufgeführt sind:
Ich bin mir sicher, dass die Liste immer weitergehen kann, besonders wenn Sie sich mit speziellen Spieltypen beschäftigen und wissen, wie Sie mithilfe von Skripten Gruppenbildungsregeln für das Verschieben von Einheitengruppen in einem RTS definieren oder wie Sie die Logik einer Benutzeroberfläche in einem erstellen können Skriptsprache zur Bereitstellung einer erweiterbaren Benutzeroberfläche für Endbenutzer und dergleichen.
quelle
Die Verwendung von Skripten hat viele Vorteile gegenüber der "Kernsprache". Einige davon sind:
quelle
Ein Skript ist normalerweise ein Teil des Codes, der außerhalb Ihrer Core Engine ausgeführt wird. Es ist normalerweise in Textdateien enthalten, wo immer Sie sie aufbewahren möchten. Dann wird es normalerweise von der Engine geladen, analysiert und zur Laufzeit ausgeführt.
Was im Allgemeinen passiert, ist, dass unabhängig von der Sprache, die Sie verwenden (beispielsweise Lua, Angelscript), diese Sprache in der Regel über einige Funktionen verfügt, die es dem Engine-Programmierer ermöglichen, Engine-Funktionen oder sogar ganze Klassen für die Instanz der "Scripting Engine" verfügbar zu machen, die gerade ausgeführt wird .
Zum Beispiel (total dummes Beispiel, aber nur um den Punkt zu verdeutlichen) könnte Ihr Spielcode eine öffentliche Funktion haben, die irgendwo Zombies erzeugt:
Mit der jetzt verwendeten Skriptsprache können Sie diese Funktion für den ausgeführten Skriptparser verfügbar machen. Dies bedeutet effektiv, dass Sie eine Textdatei öffnen und "SpawnZombie (200,300,1337)" schreiben können. Sobald Ihre Engine den Code ausführt, wird an dieser Stelle ein Zombie erzeugt.
In den anderen Antworten sind bereits einige gute Beispiele dafür aufgeführt, wie dies normalerweise verwendet wird, aber sie lassen einen Punkt aus, den ich sehr wichtig finde:
Diese Art von Skripten macht es sehr einfach, das Gameplay zur Laufzeit zu debuggen oder zu testen.
Angenommen, Sie möchten herausfinden, wie Sie einen Zombie auf der Karte platzieren können, damit er den Spieler am meisten erschreckt, sobald er ihn entdeckt. Ohne Skriptunterstützung müssten Sie die Anwendung beenden, einige magische Zahlen im Code ändern, neu kompilieren und testen.
Mit Scripting-Unterstützung (vorausgesetzt, Sie haben bereits eine Methode zur Texteingabe zur Laufzeit, z. B. eine Debug-Konsole), geben Sie einfach "SpawnZombie (333,444,555)" ein und sehen, wie es aussieht.
Auf die gleiche Weise ist es möglich, Waffen und Fahrzeuge zu spawnen, verschiedene Karten zu laden, die Werte einiger Dinge im Spiel zu ändern usw., Feinde zu befördern, weil Sie keine Zeit damit verschwenden möchten, zu dem Teil zu gelangen, der sein muss getestet etc.
Dies erspart Ihnen bei komplexeren Spielen jede Menge Zeit.
quelle
1) Skripte sind oft einfacher zu ändern als Code.
2) Skripte können häufig vor Ort geändert werden. Dies ermöglicht das Modden des Spiels.
quelle
Die meisten Skriptsprachen sind viel ausdrucksvoller als die Sprache in der Core Engine. Häufig ist die Engine aus Leistungsgründen in einer Sprache mit relativ niedrigen Sprachniveaus (z. B. C ++) geschrieben, aber der Gameplay-Code muss nicht so performant sein, sodass sich die Prioritäten dahingehend verschieben, dass Funktionen einfach ausgedrückt werden können.
Zum Beispiel dynamisches oder statisches Tippen. Ein weiteres Beispiel: Garbage Collection vs. manuelle Speicherverwaltung.
quelle
Mit Skripten können Sie Logik auf einer höheren Ebene schreiben. Mit anderen Worten, Sie schreiben weniger Code mit mehr Funktionalität.
Das folgende Beispiel zeigt den Unterschied zwischen dem Schreiben von Code und dem Schreiben in einer Skriptsprache.
Spielcode
}
Skriptcode
Sehen Sie, wie viel weniger Code der Designer tun muss, wenn Sie eine Skriptsprache verwenden?
Der Grund dafür ist, dass Sie im Spielcode ein Ereignis in mehrere Frames aufteilen und Code aus einer Perspektive mit mehreren Frames schreiben müssen. Bei der Skripterstellung können Sie sich mehrere Frames als eine einzige Codezeile vorstellen, da alle zusätzlichen Codes hinter einer Skriptfunktion abstrahiert werden.
Sie mögen gefragt haben, aber kann diese Funktion nicht auch nur in Spielcode geschrieben werden? Ja, aber das bedeutet, dass die Entwickler den Quellcode der Game-Engine öffnen und alle darin enthaltenen Codes schreiben müssen, und Sie möchten nicht, dass Ihre Entwickler den Quellcode der Game-Engine durchgehen (sie könnten sich versehentlich ändern) ein anderer Code und das Ganze stürzt ab).
Sie möchten stattdessen, dass Ihr Designer Folgendes ausführt: Klicken Sie mit der rechten Maustaste auf ein Auto im Karteneditor, klicken Sie auf Skript einfügen, und geben Sie die Skriptcodes ein. Es gibt keine Probleme mit den Quellcodes der kritischen Spiele-Engine.
quelle