Jump to content

Unity смена дня и ночи скриптом


Recommended Posts

Для смены дня и ночи в Unity3d через скрипт сменим текстуру неба, силу и цвет окружающего освещения (ambient), уберем солнце, зададим настройки тумана.

 

 

Несколько ночных скайбоксов Night Skyboxes Pack 2.unitypackage https://yadi.sk/d/Ds8DWMmK3XwSiD

пак качественных скайбоксов под разные времена суток Skyboxes MegaPack 1.unitypackage https://yadi.sk/d/x7n1t3Kw3XwTKU

 

Создайте файл с названием DayNightChange.cs, и скопируйте в него:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DayNightChange : MonoBehaviour
{

    // скрипт для сменя дня и ночи. Запоминает ваши настройки неба и освещения, и меняет их на ночные
    // после чего вы можете опять вызывать его функцию смены, чтобы он восстановил прежние настройки
    // не забудьте установить на камере "Clear Flags - Skybox"

    // переменные для запоминания изначальных настроек в методе Start
    Material oldSkyBox; // настройки текстуры неба
    Color oldAmbientColor; // цвет и яркость окружающего освещения
    float oldSunSize; // размер солнца или как-то так
    Color oldFogColor; // яркость и цвет тумана
    float oldFogDensity; // плотность тумана
    bool oldFogEnabled; // включен ли туман
    Color oldDirLightValue; // основное освещение

    [Header("Задайте новые настройки")]

    [Tooltip("Задайте текстуру скайбокса")]
    public Material newSkyBox; // материал скайбокса (картинка неба)

    [Tooltip("Цвет окружающего освещения")]
    public Color newAmbientColor; // окружающее освещение https://unity3d.com/ru/learn/tutorials/topics/graphics/ambient-lighting

    [Tooltip("Цвет тумана")]
    public Color newFogColor; // цвет тумана

    [Tooltip("Плотность тумана")]
    [Range(0, 1)]
    public float newFogDensity; // плотность тумана

    [Tooltip("Размер солнца или что-то вроде того")]
    public float newSunSize; // размер солнца

    [Tooltip("Включен ли туман?")]
    public bool newFogEnabled;

    [Tooltip("Перетащите сюда основное освещение")]
    public Light directionLight; // Direction Light, чтобы менять ему силу освещения 

    [Tooltip("Яркость нового основного освещения (Direction Light)")]
    public Color newDirLightValue;
     
    void Start()
    {
        // сначала запоминаем изначальные настройки 
        oldSkyBox = RenderSettings.skybox; // настройки текстуры неба
        oldAmbientColor = RenderSettings.ambientLight; // цвет и яркость окружающего освещения
        oldSunSize = RenderSettings.flareStrength; // размер солнца или как-то так
        oldFogColor = RenderSettings.fogColor; // яркость и цвет тумана
        oldFogDensity = RenderSettings.fogDensity; // плотность тумана
        oldFogEnabled = RenderSettings.fog; // включен ли туман
        oldDirLightValue = directionLight.color; // основное освещение
    }


    void Update()
    {

    }

    bool isNewSetting = false; // показывает, включены новые настройки или старые
    public void ChangeDayNight()
    {
        if (isNewSetting == false) // если новые настройки не включены
        {
            Debug.Log("DayNightChange: Настройки из инспектора включены");
            // то активируем настройки из инспектора
            RenderSettings.skybox = newSkyBox; // настройки текстуры неба
            RenderSettings.ambientLight = newAmbientColor; // цвет и яркость окружающего освещения
            RenderSettings.flareStrength = newSunSize; // размер солнца или как-то так
            RenderSettings.fogColor = newFogColor; // яркость и цвет тумана
            RenderSettings.fogDensity = newFogDensity; // плотность тумана
            RenderSettings.fog = newFogEnabled; // включен ли туман
            directionLight.color = newDirLightValue; // яркость основного освещения
            isNewSetting = true; // переключатель в "новые настройки включены"
        }

        else // если новые настройки уже активны
        {
            Debug.Log("DayNightChange: Настройки изначальные включены");
            // то устанавливаем старые настройки
            RenderSettings.skybox = oldSkyBox; // настройки текстуры неба
            RenderSettings.ambientLight = oldAmbientColor; // цвет и яркость окружающего освещения
            RenderSettings.flareStrength = oldSunSize; // размер солнца или как-то так
            RenderSettings.fogColor = oldFogColor; // яркость и цвет тумана
            RenderSettings.fogDensity = oldFogDensity; // плотность тумана
            RenderSettings.fog = oldFogEnabled; // включен ли туман
            directionLight.color = oldDirLightValue; // яркость основного освещения
            isNewSetting = false; // переключатель в "новые настройки включены"
        }
    }
}

 

Link to post
Share on other sites
 

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

Powered by Invision Community
Поддержка Invision Community в России

×
  • Create New...