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
 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

×
  • Create New...