Roblox Studio Skript Bedeutung?

1 Antwort

Allgemein soll das Skript einen Tag-/Nacht-Wechsel implementieren.

local dayLength = 12
local cycleTime = dayLength * 60

Hierbei geht man zunächst davon aus, dass die Hellphase eines Tags 12h (Spielweltzeit) dauert. Eine Stunde in der Spielwelt entspricht einer Minute in der Realzeit. Die cycleTime speichert die Anzahl an Sekunden, denn dieser Wert wird für spätere Berechnungen (die auf Sekundenbasis laufen) benötigt.

In dieser Zeile:

local lighting = game:GetService("Lighting")

wird der Lighting-Service von Roblox geholt. Über ihn kann die globale Beleuchtung in der Spielwelt gesteuert werden. In der Roblox-Dokumentation findest du noch mehr Informationen zu diesem Service (unter anderem auch eine einfachere Version deines obigen Skripts).

Um nun die aktuelle Tageszeit zu ermitteln, wird die erste Berechnung fällig.

local startTime = tick() - (lighting:getMinutesAfterMidnight() / minutesInADay) * cycleTime

Die tick-Funktion liefert die Anzahl an Sekunden, die seit dem 1.1.1970 (Unixzeit) vergangen sind. Die getMinutesAfterMidnight-Funktion wiederum gibt die Anzahl an Minuten nach Mitternacht (Spielwelt) zurück. Diese Minutenanzahl muss mit cycleTime multipliziert werden, da es ja um eine Berechnung in Sekunden geht.

local endTime = startTime + cycleTime

Die Endzeit verweist ebenso auf einen Wert in Sekunden. Also die aktuelle Zeit addiert mit einem Tageszyklus.

local timeRatio = minutesInADay / cycleTime

Die timeRatio wiederum enthält das Verhältnis zwischen Minute (Spielweltzeit) und einem halben Tageszyklus (Hell-/Dunkelphase) in Sekunden (Realzeit). Das heißt, wie viele Sekunden in der Realzeit einer Minute in der Spielweltzeit entsprechen.

Die folgende Prüfung:

if dayLength == 0 then
  dayLength = 1
end

ist redundant, da der Fall nie eintreten wird.

Die Schleife ist schließlich dazu da, die Zyklen abzuzählen. Immer wenn die aktuelle Zeit der Endzeit entspricht, werden Start- und Endzeit aktualisiert. Der Timer des Lighting-Moduls wiederum wird bei jedem Iterationsschritt via setMinutesAfterMidnight aktualisiert (das tut er nicht automatisch). Dafür wird erst die verstrichene Zeit in Sekunden (Echtzeit) ermittelt und diese dann (durch die Multiplikation mit timeRatio) in die Minuten in Spielweltzeit konvertiert.

Schwebfliege264 
Fragesteller
 30.08.2023, 18:25

Die Antwort war extrem hilfreich, vielen Dank!

0