Как сделать ночь в юнити

Добавил пользователь Alex
Обновлено: 04.10.2024

Но используя Time.timeScale вся игра погружается в slow motinon, в том числе камера, анимация кнопок т.д.

В камере использую Input.GetAxis, который тоже работает от времени в игре и из-за этого при остановке времени (Time.timeScale = 0) и камера прекращает двигаться.

2) Думаю использовать отдельный скрипт, который будет иметь переменную типа float, к которой присваивается значение Time.deltaTime * n (где n - во сколько раз ускорено). Но это будет очень муторно, ведь тогда ко всему нужно будет привязывать эту переменную (к анимациям, движению персонажей, rigidBody и т.д.).

Можно ли как то иначе это использовать? Чтобы к примеру в одном скрипте использовалось только время с запуска игры, а не игровое время.

Иногда, при создании проекта, есть необходимость в создании часов. Например, в игре есть потребность в часах, от значения которых будут зависеть некоторые другие параметры, которые будут влиять на игровую сцену или на самого персонажа.

В этой статье мы попробуем реализовать часы двух видов:

  1. часы, которые отображают реальное время
  2. часы, которые отображают вымышленное время.

Давайте начнем , запустим Unity и для начала настроим сцену. Добавим на сцену компонент Canvas и в нем Panel с тремя элементами Text для отображения часов: часы, минуты, секунды. Должно, получится примерно как на скриншоте…

canvas

Далее создадим скрипт ClockReality и напишем такой код:

Здесь все предельно просто, поместим это скрипт на компонент Panel и укажем наши Text (Часы, минуты, секунды)

RealityClock

Это был первый метод создания часов реального времени. Возможно, вы скажете, а почему не сделать один компонент Text и не запихать все туда? Разделение на часы, секунды, и минуты даст возможность обращения к ним из других скриптов, например, если вы захотите сделать какой-нибудь параметр, который будет зависеть от текущего времени.

newclock

Создадим новый скрипт NewClock и напишем такой код:

Здесь тоже ничего сложного, значение param уменьшается с каждой секундой и когда оно равно нулю, прибавляем одну секунду, а за ней и минуты и часы. Если необходимо замедлить или ускорить часы, просто изменим значение param=1 на другое (чем меньше, тем часы будут работать быстрее). Помещаем этот скрипт на вторую панель и так же, указываем три Text для часов.

Newclocksprew

После небольшой обработки сцены можно получить вот такие разные часы…

На этом все, ждем ваших комментариев, предложений или изменений по данной статье, удачных проектов!


Таймер в Unity 3D очень часто бывает нужен для совершения каких-либо периодических действий, таких как показ рекламы. Для его реализации мы будем использовать IEnumerator. Итак, давайте создадим его:

yield return new WaitForSeconds(100);

Этот IEnumerator возвращает ожидание 100 секунд, после чего показывает пользователю рекламу (как пример я указал функцию show_ad()). Для того, чтобы запустить данный IEnumerator, в Unity есть команда:

Готово! После запуска программа подождет 100 секунд, после чего выполнит функцию показа рекламы. Если нам необходимо, чтобы такое действие происходило каждые 100 секунд, обернем код внутри IEnumerator'а в цикл while(true):

yield return new WaitForSeconds(100);

Теперь функция вызывается каждые 100 секунд.

Также нужно отметить, что при команде StartCoroutine() весь код после будет также выполняться, так как IEnumerator не блокирует поток, выполняющий основной код.

Как сделать многоуровневую игру в Unity? Или игру, в которой игрок может перемещаться (телепортировать) между локациями?

Один из наиболее частых вариантов реализации заключается в создании для каждого уровня игры отдельной сцены. Итак, алгоритм создания такой игры следующий.

Шаг 1. Создать сцены для каждого уровня и пр. составляющих игры. Продумать понятную и гибкую систему идентификации файлов сцен

Например, сцены могут иметь следующие имена:

  • StartScene – стартовая сцена игры. Это может быть сцена, в которой игрок знакомится с правилами игры, может изменить некоторые начальные настройки, выбрать персонажа и т.д.
  • Layer1,Layer2,Layer3, … — сцены, соответствующие 1-му, 2-му, 3-му и т.д. уровням игры.
  • EndGame – конечная сцена, которая загружается в финале игры.

Шаг 2. Продумать геймплей так, чтобы было понятно, когда завершается текущий уровень и при каких условиях может быть загружена сцена для следующего уровня или завершения игры

Например, следующий уровень может загружаться при следующих возможных условиях:

а) игрок набрал определённое количество баллов. Это условие имеет смысл проверять каждый кадр в методе Update();

б) игрок добрался до определенного места в игре. Например, пришёл к заданной двери. Соответственно на объекте двери необходимо поставить коллайдер, и при входе в этот коллайдер должна будет выполняться загрузка сцены;

Family Island - меню выбора островов для путешествий и приключений

Family Island — меню выбора островов для путешествий и приключений

Когда речь идёт не столько об уровнях игры, сколько о разных локациях, между которыми игрок имеет возможность перемещаться. Пример такой игры – Family Island – там игрок может путешествовать на различные острова.

Candy Crush Saga — карта игры с выбором уровней

Второй вариант геймплея с аналогичным функционалом – наличие в реализации отдельной сцены с картой игры. Кликая по определённым зонам-кнопкам этой игры, игрок загружает соответствующий уровень (при условии, что этот уровень для него открыт). Наиболее популярный пример такой игры – Candy Crush Saga и ей подобные.

Шаг 3. Написание функции (метода) загрузки соответствующей сцены.

Для загрузки сцен в движке Unity предусмотрен метод LoadScene (…) из класса SceneManager пространства имён UnityEngine.SceneManagement.

Это значит, что в классе (скрипте), в котором будет выполняться загрузка сцены с помощью указанного метода, должна быть прописана директива:

Далее, при вызове метода следует указывать и имя класса:

У данного метода есть несколько перегрузок (вариантов вызова с различными наборами параметров), подробнее о которых можно почитать в официальной документации Unity.

Наиболее простые способы вызова метода следующие.

Вариант 1 – с явным указанием имени загружаемой сцены в качестве параметра. Например:

Вариант 2 – с указанием индекса загружаемой сцены в качестве параметра. Например:

Индекс – это число-порядковый номер сцены, который автоматически присваивается в окне настроек Build Settings:

Окно настроек Build Settings Unity

Окно настроек Build Settings

Один из возможных вариантов скрипта следующий:

Этот скрипт должен быть на объектах-дверях или телепортах. На них же должен стоять коллайдер-триггер.

Шаг 4. Заполнить раздел Scenes In Build в окне настроек Build Settings, внеся туда все сцены, которые необходимо будет загружать

Пример этого окна представлен выше. Чтобы его вызвать, используется главное меню, пункты File -> Build Settings...


Меню File -> Build Settings… Unity

Читайте также: