FANDOM


Scripting erlaubt dir zu definieren, wie dein Spiel (oder interaktiver Film) sich verhält oder auf die Eingaben des Spielers reagiert. Es erlaubt Aktionen als Antwort auf Ereignisse, z.B. das Drücken einer Taste, Ablauf einer Zeitspanne, und vieles mehr.

Auf lange Sicht soll CraftStudio ein visuelles Scriptingsystem erhalten. Vorerst sind die Scripte in Lua, einer einfachen Programmiersprache, geschrieben.

Vielleicht solltest du dir die Scripting-Referenz ansehen, welche alle verfügbaren Funktionen darstellt, die dir CraftStudio für die Verwendung in Scripten zur Verfügung stellt.


Verwendung von ScriptsBearbeiten

Ein Script bestimmt das Verhalten eines oder mehrerer Objekte deines Spiels.

Einmal erstellt, kann ein Script (mittels "Verhalten (scripted)"-Komponente) an ein oder mehrere Spielobjekte angehängt werden. Das heißt, du kannst das selbe Script auf mehrere Objekte anwenden, z.B. um ein Verhalten einer Reihe ähnlicher Objekte (z.B. gleiche Art von Gegnern oder einer Reihe von Türen, die alle auf die gleiche Weise reagieren müssen) zuzuweisen.

Anatomie von "Verhalten (scripted)" (scripted behaviour)Bearbeiten

Wenn ein Script erstellt wird, definiert das Scriptverhalten zwei Rezepte (oder "Funktionen" in Programmiersprache), die zu unterschiedlichen Gelegenheiten ausgeführt (oder "aufgerufen") werden:

function Behavior:Awake()
    
end

function Behavior:Update()
    
end
  • Die Funktion Awake wird aufgerufen, wenn ein Spielobjekt mit diesem Script zum Leben erwacht. Spielobjekte können erstellt werden, wenn eine Szene geladen wird oder bei Bedarf, wenn das Spiel läuft.
  • Die Funktioen mit dem Namen Update wird 60 Mal in einer Sekunde für jedes Spielobjekt mit diesem Script aufgerufen.

Awake sollte zum einmaligen Initialisieren verwendet werden und Update die Script-Logik enthalten, während die Zeit vergeht.

(Eine dritte Funktion Behavior:Start kann auch dem Script hinzugefügt werden. Wenn sie existiert, wird sie ausgeführt, nachdem alle Awake-Funktionen ausgeführt wurden, aber noch bevor die erste Update-Funktion irgend eines Objekts ausgeführt wird. Nützlich, wenn du Dinge in einer bestimmten Reihenfolge initialisieren möchtest)

Dein erstes Script: Ein Objekt über eine Zeitspanne bewegen!Bearbeiten

Ok, lass uns mit etwas einfachen anfangen: ein sich bewegendes Objekt.

Wir fügen eine einzelne Zeile zwischen dem Start und dem Ende der Update Funktion hinzu:

function Behavior:Update()
    self.gameObject.transform:MoveLocal( Vector3:New( 0.01, 0, 0 ) )
end

Das ist es auch schon!

self stellt die aktuelle Inkarnation deines Scriptes dar. Durch die Verwendung von Punkten, können wir auf seine Eigenschaften zugreifen. Also ist self.gameObject das Spielobjekt, dem wir die "Verhalten"-Komponente angehängt haben. Dieses Spielobjekt besitzt eine transform Komponente, welche die Position, Orientierung und Skalierung des Objekts verwaltet.

Letztendlich stellt die transform Komponente eine Funktion mit dem Namen MoveLocal zur Verfügung. Der Aufruf dieser Funktion aktualisiert die Position des Objekts (durch hinzurechnen der Werte; auch Offset(ting) genannt), mit den spezifizierten Werten auf jeder Achse: 0.01, 0 und 0 respektive X, Y und Z.

Beachte, dass, wenn du eine Funktion die sich auf eine bestimmte Komponente oder Objekt bezieht, aufrufst, du einen Doppelpunkt, und keinen Punkt vor dem Funktionsnamen verwendest. Der Doppelpunkt zeigt an, dass das Rezept / Funktion auf der rechten Seite, das auf der linken Seite definierte Objekt beeinflusst.

Entscheidungen treffen: nur bewegen, wenn eine Taste gedrückt wirdBearbeiten

Wir können unser Spiel interaktive gestalten, indem wir Bedingungen hinzufügen. if Blöcke führen nur dann den darin eingeschlossen Code aus, wenn die Bedingung wahr ist.

function Behavior:Update()
    if CraftStudio.Input.IsButtonDown( "Fire" ) then
        self.gameObject.transform:MoveLocal( Vector3:New( 0.01, 0, 0 ) )
    end
end

In diesem Code-Schnipsel rufen wir die globale (global: darauf kann man von überall zugreifen) CraftStudio.Input.IsButtonDown Funktion auf, die uns mitteilt, wenn eine bestimmte Taste gedrückt gehalten wird (die Bedingung ist dann wahr (true)) oder nicht (die Bedingung wäre dann falsch (false) sein und der Code zwischen then und end würde übersprungen werden)

Erinnere dich daran, dass die Behavior:Update Funktion 60 Mal in der Sekunde aufgerufen wird, so dass das Objekt sich nur bewegt, wenn die Taste gedrückt gehalten wird. Wird die Taste los gelassen, steht das Objekt still.

Zustände (States) verfolgen (Gesundheit, Rüstung, wasauchimmer)Bearbeiten

Auch wenn wir das selbe Script an mehreren Spielobjekten wieder verwenden können, ist es möglich, Zustände unabhängig für jedes dieser Spielobjekte zu verfolgen. Um einen Zustand (Munitionszähler, ein Name oder irgendwas) an eine spezielle Instanz deines Scipts zu hängen, solltest du die Variablen an das self Objekt binden.

Zum Beispiel können wir verfolgen, wieviel Munition ein Spielobjekt hat:

function Behavior:Start()
    self.bullets = 100
end

function Behavior:Update()
    if [irgendwelche Zustände/Ereignisse, die den Gegner feuern lassen] then
        self.bullets = self.bullets - 1
        
        if self.bullets == 0 then
            print( "Keine Munition mehr!" )
        end
    end
end

Mehrere Gegner können dieses Script nun verwenden und, dabei jeder Gegner für sich, den eigenen Munitionsvorrat verfolgen. Hätten wir nicht self verwendet, würden die Gegner alle aus dem selben Munitionsvorrat ziehen.

WeitergehendesBearbeiten

Es gibt zwei Wege mit deinem Spiel zu interagieren:

  • Durch die Szene, über das Aufrufen von Funktionen an den Spielobjekten oder deren Komponenten, wie z.B. die MoveLocal Funktion, über die wir gesprochen haben.
  • Durch die globale CraftStudio Tabelle die Zugriff auf globale Features des Spiels ermöglicht, z.B. Spielsteuerung (CraftStudio.Input), oder Funktionen wie z.B. das Laden einer anderen Szene (CraftStudio.LoadScene).

Für eine komplette Liste dieser Funktionen, und wie sie arbeiten, schaue bitte in die Scripting-Referenz.

Störung durch Adblocker erkannt!


Wikia ist eine gebührenfreie Seite, die sich durch Werbung finanziert. Benutzer, die Adblocker einsetzen, haben eine modifizierte Ansicht der Seite.

Wikia ist nicht verfügbar, wenn du weitere Modifikationen in dem Adblocker-Programm gemacht hast. Wenn du sie entfernst, dann wird die Seite ohne Probleme geladen.