Wann würde ich "Skripte" oder "Skripte" in einem Spiel verwenden, im Gegensatz zur Hauptsprache?

13

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?

Tetrade
quelle
4
Mögliche Betrogene: gamedev.stackexchange.com/questions/2913/...
Tetrad
@Tetrad Vielen Dank für den Link, aber ich denke, die andere Frage befasst sich eher mit der grundlegenden Architekturfrage des "Warum" als mit dem Was und Wann.
2
"Was" und "Wann" sind spezifisch für Ihre Anwendungsfälle. Das "Warum" gibt Ihnen Entscheidungsfähigkeit. Ohne Einzelheiten ist diese Frage (in meinen Augen) ein Betrug.
Tetrad

Antworten:

15

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:

  • Skriptsprachen werden normalerweise im Speicher verwaltet, sodass Sie sich nicht um Zuweisungen kümmern müssen
  • In der Regel handelt es sich um eine lose geschriebene Sprache, bei der Sie nicht mehr sicherstellen müssen, dass Sie den Variablentyp für das verwenden, was Sie tun. Erstellen Sie einfach eine Variable und gehen Sie damit um.
  • Die Sprachen selbst sind oft sehr simpel und bieten Menschen, die keine Programmierer sind, einiges an Kontrolle
  • Zum Ändern von Skripten muss die Core-Engine nicht neu kompiliert werden.
  • Scripting vs Coding verkürzt häufig die Zeit, die für eine sehr iterative Optimierung der Spielelogik erforderlich ist.
  • Abhängig von Design und Sprache können Sie ein Skript häufig neu laden, während das Spiel ausgeführt wird, um das Stimmen / Testen zu vereinfachen.

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.

James
quelle
9

Die Verwendung von Skripten hat viele Vorteile gegenüber der "Kernsprache". Einige davon sind:

  • Verschieben (mehr) des Inhalts von Core-Entwicklern zu Künstlern, wodurch die Core-Entwickler von Gameplay-Aufgaben zu Engine-Aufgaben befreit werden
  • Skripte neigen dazu, in einer Sandbox zu sein, und können nichts wirklich Gefährliches tun
  • Das Ändern von Skripten erfordert keine Neukompilierung und erneute Ausführung des Spiels
Jari Komppa
quelle
Können Sie als erstes Aufzählungszeichen ein Beispiel für eine Funktion angeben, die in ein Skript verschoben wird, das von Künstlern bearbeitet werden kann?
@Brian Reindel Beispiele wären Waffen- / NPC-Statistiken, KI und Karten / Level.
Hackworth
1
@ Hackworth Wollen Sie damit sagen, dass die AI-Programmierung von Künstlern gemacht wird? Das Scripting, das ein Künstler ausführen würde, würde Skripte für Animationen und das Rendern von 3D-Objekten und dergleichen enthalten.
KRB
3
Künstler sollten nicht dazu gebracht werden, irgendetwas zu programmieren. Sie trennen die Engine aus Gründen der Modularität von der Spielelogik und nicht, um die Entwicklung an Personen zu übertragen, deren Stärken an anderer Stelle liegen.
Jon Purdy
1
@ James Nun, der Punkt ist: Sie programmieren "leicht", aber sie sind im "Content" -Camp. Die Terminologie ist also schwierig. =)
Jari Komppa
6

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:

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

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.

TravisG
quelle
2

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.

Loren Pechtel
quelle
Wäre es also fair zu sagen, dass Ihre Skripte dann aus Sprachen bestehen, die nicht so kompiliert wurden, dass sie von irgendjemandem bearbeitet werden können?
@ Brian Reindel: Im Allgemeinen ja.
Loren Pechtel
2

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.

jhocking
quelle
0

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

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

Skriptcode

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

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.

Entwickler
quelle