С Новым годом! Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/89: Рейтинг темы: голосов - 89, средняя оценка - 4.92
 Аватар для ZX3000
0 / 0 / 0
Регистрация: 20.03.2016
Сообщений: 16

Смена дня и ночи

20.03.2016, 08:58. Показов 18697. Ответов 23

Студворк — интернет-сервис помощи студентам
Решил наваять простенький скрипт для смены дня и ночи. Новичкам в Unity3D он, думаю, будет как раз кстати.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
var sun : Transform; // Источник света, который будет солнцем
var speed : float; // Скорость вращения "Солнца"
var speed2 : float; // Это тоже скорость
 
function Update () 
{
var q : Quaternion; // Создаем кватернион. По нему будет вращаться Солнце
q = Quaternion.AngleAxis(speed2,Vector3(0,0,10)); // Задаем данные кватерниону
sun.transform.rotation = q * sun.transform.rotation; // Запускаем вращение. Теперь за один "тик" угол поворота (кватернион) будет меняться
}
//Теперь пихаем все нужные объекты и числа - и готово
Вот так как-то у меня все получилось
По - моему неплохо, т.к. в Unity3D свет уже настроен под такой код

Добавлено через 51 секунду
Если что Солнце - это Directional light
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.03.2016, 08:58
Ответы с готовыми решениями:

Смена дня и ночи
Подскажите как можно сделать смену дня и ночи на фоне какого-нибудь рисунка

Смена дня/ночи на jQuery
Пишу скрипт смены дня/ночи. function night () { setTimeout(function(){ $('.cloud').fadeTo(15000,0); ...

Графика. Лето. Смена дня и ночи
Помогите построить графическое изображение природы (лето) и создать смену дня и ночи. Добавлено через 5 часов 56 минут можно как в...

23
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
20.03.2016, 10:02
ZX3000, где учет фпс?! Не задумались, что при 60 и при 120 смена суток будет в ДВА раза отличаться?
1
20.03.2016, 12:55

Не по теме:

гений...

0
 Аватар для ZX3000
0 / 0 / 0
Регистрация: 20.03.2016
Сообщений: 16
20.03.2016, 15:05  [ТС]
Если очень принципиально :

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var sun : Transform; // Источник света, который будет солнцем
var speed : float; // Скорость вращения "Солнца"
var speed2 : float; // Это тоже скорость
var time : float;
 
function Update () 
{
var q : Quaternion; // Создаем кватернион. По нему будет вращаться Солнце
q = Quaternion.AngleAxis(speed2,Vector3(0,0,10)); // Задаем данные кватерниону
time +=Time.deltaTime;
if (time-time/1==0)
{
sun.transform.rotation = q * sun.transform.rotation; // Запускаем вращение. Теперь за один "тик" угол поворота (кватернион) будет меняться
}
}
//Теперь пихаем все нужные объекты и числа - и готово
Вуаля! Таймер!
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
23.03.2016, 16:56
Мысль интересная, но надо доделать. Если есть другие источники света то когда солнце находится с другой стороны, то терраин будет "мерцать". Поэтому, при наступлении ночи предлагаю Light отключать, а утром включать. Хотел реализовать это на основании угла поворота, но в юнити почему то меняется наклон по всем осям. На счет фпс мне неясно что вы хотели этим сказать.
В своем проекте я сделал так:
Java
1
2
3
4
5
public var speed : float;
 
function Update () {
transform.rotation = Quaternion.AngleAxis(speed * Time.deltaTime,Vector3(0,0,1)) * transform.rotation; 
}
Скрипт закидывать прямо на источник Directional Light.
Разрабатываю мобильное приложение и есть несколько вопросов. Как организовать обновление поворота не в каждом кадре, чтобы снизить ресурсоемкость? Сильно скажется на производительности? И подскажите пожалуйста в коде, как реализовать поворот каждые несколько секунд и отключать солнце ночью.

Не по теме:

Кликните здесь для просмотра всего текста
Вопрос к знатокам. Почему когда я добавляю скрипт, фпс в редакторе показывает 300, а когда скрипта нет, то около 100?

0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
23.03.2016, 18:28
Цитата Сообщение от Quat1111 Посмотреть сообщение
Вопрос к знатокам. Почему когда я добавляю скрипт, фпс в редакторе показывает 300, а когда скрипта нет, то около 100?
ФПС в редакторе не соответствует реальным данным. Это надо ручками считать.
0
 Аватар для ZX3000
0 / 0 / 0
Регистрация: 20.03.2016
Сообщений: 16
23.03.2016, 21:37  [ТС]
Да, еще один вопросик вооооообще не по теме: Я сделал простенький топорик в 3ds max'е, сделал ему триггер, поставил абсолютно работающий скрипт для рубки дерева, но триггер топора работает крайне криво: топор до самой ручки должен входить в дерево. Почему такое, не подскажете?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
24.03.2016, 01:41
ZX3000, триггер неправильно расположен, наверное
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
24.03.2016, 20:24
Заморочился с вопросом смены дня и ночи.

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using UnityEngine;
using System.Collections;
 
public class Sun : MonoBehaviour {
    
    public float speed;
    private Vector3 Axis = new Vector3(1, 0, 0);
    Light _light;
 
    void Start()
    {
        _light = GetComponent<Light>();
    }
    void Update () {
        transform.rotation *= Quaternion.AngleAxis(speed * Time.deltaTime, Axis); 
        if (transform.rotation.x > 0 && transform.rotation.x < 90) //отключение и включение источников света, когда ночь
            _light.enabled = true;
            //тут будут включаться фонари
        else
            _light.enabled = false;
    }
}


В редакторе юнити поворот показывает одно, а в отладчике моно другое.

Помогите сделать хорошую смену дня и ночи для мобильного приложения

Добавлено через 8 минут
Дальше планирую использовать yield, чтобы уменьшить нагрузку на процессор, а то 30 фпс этот скрипт съедает
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
24.03.2016, 21:37
Quat1111, таймер и раз в секунду менять поворот света.
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
24.03.2016, 22:20
Cr0c, А включение и отключение источника света?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
24.03.2016, 22:49
Quat1111, lerp для интенсивности от времени суток в игре, и lerp для цвета освещения
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
24.03.2016, 23:24
Cr0c, Разрабатываю мобильное приложение, поэтому стараюсь везде оптимизировать затраты на вычисления. Я уже привел в коде задумку, полное отключение источника света ночью.
Lerp для свойства Intensity сделает темно, но свет будет светить, да и в принципе не сильно нужна плавность изменения света.
Тот скрипт, который я скинул почти меня устраивает.
Загвоздка лишь в том, что в самом редакторе Unity Transform.Rotation.х показывает одно, а в скрипте при отладке - другое.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
25.03.2016, 00:00
Quat1111, какая разница, что он показывает? Главное выставить начальный наклон правильно, а потом уже пофигу будет. Просто в нулевой точке задавать начальное положение и тогда не будет накопления погрешности. Что мешает после лерпа проверять интенсивность и отключать источник если меньше ноля?
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
25.03.2016, 00:34
Cr0c, начальный наклон у меня был 0,90,0
сделал 0, 0, 0
После запуска скрипта получается будто несколько раз ночь.
Интенсивность не использую потому что стараюсь сэкономить ресурсы, свет их отнимает много

Добавлено через 6 минут
Ночью иногда свет не отключается. Это из-за того, что я смотрел угол поворота относительно оси x в редакторе и по нему написал код для скрипта.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
25.03.2016, 07:42
Quat1111, ничего не понял.
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
25.03.2016, 10:03
Есть Directional Light, к нему подключен скрипт вращения по оси X, при определенных углах источник света должен отключаться (Light.enabled) и включаться

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Sun : MonoBehaviour {
    
    public float speed;
    private Vector3 Axis = new Vector3(1, 0, 0); //ось x
    Light _light;
 
    void Start()
    {
        _light = GetComponent<Light>();
    }
    void Update () {
        transform.rotation *= Quaternion.AngleAxis(speed * Time.deltaTime, Axis);  //получаем кватернион и совершаем поворот
        if (transform.rotation.x > 0 && transform.rotation.x < 90) // 0 и 90 смотрел в редакторе юнити, это те цифры, когда день
            _light.enabled = true;
        else //иначе ночь 
            _light.enabled = false;
    }
}
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
25.03.2016, 10:41
Quat1111,
Цитата Сообщение от Quat1111 Посмотреть сообщение
Интенсивность не использую потому что стараюсь сэкономить ресурсы, свет их отнимает много
Разве интенсивность света влияет на производительность?
Я бы сделал функцию, считающую игровое время, по ней вычислял интенсивность, цвет освещения и угол поворота.
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
25.03.2016, 11:20
Цитата Сообщение от Cr0c Посмотреть сообщение
Разве интенсивность света влияет на производительность?
Light.Intensity = 1; Light.enabled = true
36 fps

Light.Intensity = 1; Light.enabled = false
62 fps

Light.Intensity = 0; Light.enabled = true
54 fps

fps считал с помощью скрипта

FPSCounter из стандарт ассетс
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
25.03.2016, 11:57
Quat1111, руки оторвать за такой замер! Где промежуточные значения? Как минимум два промежуточных должно быть!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2016, 11:57
Помогаю со студенческими работами здесь

смена ночи днем
помогите написать процедуру на смену ночи днем, у меня с анимациями туго

На ввод времени суток вывести соответствующие пожелания доброго утра, дня, вечера и спокойной ночи
Помогите! Сколько вожусь уже с этим кодом, никак не выходит то, что требуется в задании.. &quot;Составить программу, которая на ввод...

Разделение дня и ночи через прогноз погоды для сайта через API Яндекса
Ранее поднял уже этот вопрос https://www.cyberforum.ru/php/thread1470414.html но только сейчас увидел специальный раздел. Суть осталась та...

Смена позиций в течении дня
В течении дня меняются позиции в яндексе по ВЧ, понятно, что в выдачу попадают, и это видно, либо новые страницы непонятных сайтов, на...

Смена текста в зависимости от дня недели и времени
Всем доброго дня. Есть необходимость выводить текст в зависимости от дня недели и времени что то вроде Расписания. нашел как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru