قالب وردپرس قالب وردپرس قالب فروشگاهی وردپرس وردپرس آموزش وردپرس

How to Create a Day and Night Cycle in Unity

Unity Texture Compression Bug: Color Banding and Artifacts on Mobile
February 16, 2026
Unity Camera Depth Texture Bug
Unity Camera Depth Texture Bug: Missing Shadows or Effects
February 17, 2026

How to Create a Day and Night Cycle in Unity

Day and Night Cycle in Unity

A day and night cycle can dramatically improve the atmosphere and immersion of your Unity game. It involves smoothly transitioning lighting, sky colors, and sometimes environmental effects over time to simulate real-world day/night behavior.

Below is a step-by-step guide for creating a flexible and efficient day-night system in Unity.

Step 1: Setup the Scene

Start with a basic 3D scene containing:

  • A Terrain or environment
  • A Directional Light (this will act as the Sun)
  • A Skybox material
  • Optional: Additional lights for lamps, indoor lighting, or ambient effects

Rename your Directional Light to Sun to keep things organized.

Step 2: Configure the Sun

Set the Directional Light as follows:

  • Type: Directional
  • Shadow Type: Soft Shadows (optional)
  • Intensity: Start with 1 (we will animate it)
  • Rotation: Set an initial angle that represents morning (e.g., X=50, Y=0, Z=0)

Later, we’ll rotate this light to simulate the sun moving across the sky.

Step 3: Create the DayNightCycle Script

Create a new C# script named DayNightCycle.cs and attach it to an empty GameObject called DayNightController.

This script will rotate the sun, adjust intensity, and optionally change ambient lighting.

using UnityEngine;

public class DayNightCycle : MonoBehaviour
{
    [Header("Sun Settings")]
    public Light sun; // Assign your directional light
    public float dayDuration = 120f; // Total seconds for a full day
    public float maxIntensity = 1f;
    public float minIntensity = 0f;

    [Header("Sky Settings")]
    public Material skyboxMaterial;
    public Color daySkyColor = Color.cyan;
    public Color nightSkyColor = Color.black;

    private float time = 0f;

    void Update()
    {
        // Increment time
        time += Time.deltaTime;
        if (time > dayDuration) time = 0f;

        // Calculate normalized time (0-1)
        float t = time / dayDuration;

        // Rotate sun
        sun.transform.localRotation = Quaternion.Euler((t * 360f) - 90f, 170f, 0f);

        // Adjust sun intensity
        if (t < 0.25f) // Morning
            sun.intensity = Mathf.Lerp(minIntensity, maxIntensity, t / 0.25f);
        else if (t < 0.75f) // Day
            sun.intensity = maxIntensity;
        else // Evening
            sun.intensity = Mathf.Lerp(maxIntensity, minIntensity, (t - 0.75f) / 0.25f);

        // Adjust skybox color
        if (skyboxMaterial != null)
            skyboxMaterial.SetColor("_Tint", Color.Lerp(nightSkyColor, daySkyColor, sun.intensity / maxIntensity));
    }
}

Step 4: Assign References

  • Drag your Directional Light into the Sun field
  • Assign the Skybox material if you want color transitions
  • Adjust dayDuration to control how fast the day-night cycle is

Step 5: Configure Skybox

If you want smoother transitions:

  • Create a procedural skybox or HDRI Skybox
  • Animate exposure or tint using the DayNightCycle script
  • Optional: Use Gradient Skyboxes for color blending

Step 6: Add Ambient Lighting

For more realism, adjust ambient light via RenderSettings:

RenderSettings.ambientLight = Color.Lerp(Color.black, Color.white, sun.intensity / maxIntensity);

This will make the scene darker at night and brighter during the day, affecting all unlit objects.

Step 7: Optional – Stars and Moon

You can add a second Directional Light for the Moon:

  • Set its color to a dim blue-white
  • Rotate opposite to the sun
  • Enable only when sun.intensity is low

Stars can be a particle system or a cubemap skybox with emission adjusted at night.

Step 8: Optional – Weather Effects

Rain, fog, or clouds can be synced to the day-night cycle. Example:

RenderSettings.fogColor = Color.Lerp(nightSkyColor, daySkyColor, sun.intensity / maxIntensity);

Step 9: Optimize Performance

  • Update the cycle every frame, but consider reducing Skybox updates if performance drops
  • Use lightweight shaders for night-time lights
  • Limit shadows for mobile if needed
  • Use baked lighting for static objects to reduce runtime costs

Step 10: Testing

Run the scene and observe:

  • The sun rotates smoothly
  • Lighting intensity changes realistically
  • Skybox and ambient lighting respond correctly
  • Optional effects like moon and stars appear at night

Advanced Enhancements

  • Add a UI clock to show in-game time
  • Blend cloud textures over the skybox
  • Sync NPC schedules to the time of day
  • Integrate with shaders for wet surfaces at night or day
  • Use animation curves for smooth light intensity transitions

Final Thoughts

A day-night cycle in Unity is a combination of light rotation, intensity control, and environmental adjustments. With a simple script, you can create an immersive world that reacts realistically over time. Once implemented, you can expand with weather, moon, stars, and gameplay effects for full dynamic realism.

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

Skip to toolbar