I will be showing you how to make a basic Daylight Cycle. I will show you real-time first, then 1 in-game minute per real-time second, and 1 in-game hour per real-time second. Let's get started, shall we?
The first step for running a daylight cycle is to be able to code it first. Put a Script in either Workspace or ServerScriptService, and preferably without any parents exept from Folders. Name the script whatever you want, but make it easy to identify in case you screw something up and it glitches out.
As with all programming, one of the first steps is to make your variables. This will allow you to make your code to access certain objects without the difficulty of rewriting it every time. You need 1 variable that is named with any name. I will choose 'minutesAfterMidnight' because it's easier to understand. Set the value of it to 0 for now.
local minutesAfterMidnight = 0
You want the time to actually change, right? You will need a 'while true do' loop with no exit parameters so you don't have to write a peice of code every time you want the time to change, which is tedious and impractical.
You should also have an 'end' statement 2 lines down so you don't get an error basically saying "Where's this loop's code supposed to end?"
local minutesAfterMidnight = 0
while true do
end
Time for the fun stuff. You want to make your code access the 'Lighting' portion of the game to change the 'SetMinutesAfterMidnight' value. To do this, write 'game.Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)'.
This will set the time to 12:00 AM, midnight. Now, we want to change it. I like do go with realistic time changing because I'm weird and I find slow progression satisfying. Put underneath the code I mentioned earlier 'minutesAfterMidnight = minutesAfterMidnight + .0167', so it only adds 1 second every time.
local minutesAfterMidnight = 0
while true do
game.Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)
minutesAfterMidnight = minutesAfterMidnight + .0167
end
Now, if we run this, Studio will lag out and probably crash. That's what 'wait' commands are for. If we change the minutesAfterMidnight by about 1 second, or .0167 of a minute, we have to wait one second for it to be real-time.
Under the new code, but still in the 'while true do' function, write 'wait(1)'. Now, you have a real-time daylight cycle!
local minutesAfterMidnight = 0
while true do
game.Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)
minutesAfterMidnight = minutesAfterMidnight + .0167
wait(1)
end
I know for a lot of you, it's tedious to try and watch a real-time sunrise for what feels like an eternity. So, you can change the minutesAfterMidnight to the hour you want (like 7) and multiply it by 60. If you want it to go by faster, you can change the 'minutesAfterMidnight = minutesAfterMidnight + .0167' .0167 variable to something like '1' for 1 minute every second, or '60' for one hour per second. You can also slow it down by changing it into a number less than .0167 for a slo-mo day/night cycle.