Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / [UNITY] Плагин "рабочего дня"

[UNITY] Плагин "рабочего дня"

Поделиться

Страницы: 1 2 3 Следующая

GravideotsПользовательwww22 мая 201712:10#0
Всем привет!

Так сложилось что мы выпустили свой первый asset для Unity, называется он Game Calendar Kit и нужен для организации игрового времени и происходящих событий.

Например:

У вас есть ресторан который должен открываться в 11 утра и закрываться в 11 часов вечера, как это реализовать? Первое что приходит в голову это написать таймер в Update через подобный луп:

 
timeLeft -= Time.deltaTime;
     if ( timeLeft < 0 )
     {
         Closed();
     }

И все бы ничего, но теперь нам нужно создать события для нашего ресторана да еще и с привязкой ко времени по минутам, и со сроком длительности события. Без календаря не обойтись, ведь события хочется распланировать. Значит нам нужны годы, месяца и дни недели, да и не забываем что все это нужно связать с таймером и как то проверять что событие "созрело". Написание всего этого займет достаточно много времени и сил, как вы понимаете у нас есть предложение поступить проще.

Game Calendar Kit предоставляет вам возможность:


    Настраивать стартовые параметры времени в игре - Год, месяц и день начала отсчета, соотношение реального времени к игровому
    Устанавливать время активной фазы и менять его во время игры
    Контролировать активную фазу - старт, рестарт, пауза
    Создавать события привязанные к дате с точностью до минуты
    Создавать коллекции событий прямо в эдиторе
    Получать только необходимые события через подписку на нужные event's - конец дня, старт события, конец события

Немного скриншотов:


Изображение
Изображение
Изображение

Обзорное видео*:

*Видео немного отстало от происходящего, с момента записи добавилась возможность менять время активной фазы во время работы приложения.

Ссылка на магазин - Game Calendar Kit в AssetStore.
Demo - тут.

Что бы развивать и поддерживать проект мы создали отдельный репозиторий - Game Calendar Kit на GitHub. Там же лежит описание структуры проекта -  Game Calendar Kit wiki. Все возникающие вопросы, проблемы можно описывать в issue.

Правка: 19 июля 2017 17:22

GravideotsПользовательwww22 мая 201712:35#1
И конечно для сообщества мы сделали несколько ключей, но что бы все не расхватал один человек будем скидывать их по запросу в комментариях.
greencrazycatПостоялецwww22 мая 201715:20#2
а что будет если игрок переведет время на устройстве ?
без привязки к серверному времени разве можно адекватно реализовать таминг событий ? :)
пример: по логике игры каждый день игроку падает бонус - игрок переводит дату и получает бонус, повторяет действие
GravideotsПользовательwww22 мая 201715:43#3
greencrazycat, это скорее плагин для игр типа The War Of Mine когда есть некие фазы игры с определением их во времени суток. Безусловно для онлайн игр без серверной реализации не обойтись =) А относительно примера с переводом времени все равно не получится) Так как в календаре хранится своя копия времени не завязанная на текущую дату.

Правка: 22 мая 2017 15:44

greencrazycatПостоялецwww22 мая 201716:11#4
Gravideots
> А относительно примера с переводом времени все равно не получится) Так как в
> календаре хранится своя копия времени не завязанная на текущую дату.
а как же тогда ? :
"Год, месяц и день начала отсчета, соотношение реального времени к игровому"
"Создавать события привязанные к дате с точностью до минуты"
"Получать только необходимые события через подписку на нужные event's - конец дня"

увы для игровых событий завязанных на датах нельзя использовать время устройства

GravideotsПользовательwww22 мая 201716:58#5
greencrazycat, попробую объяснить. Сразу прошу прошения за огромные скрины.

При создании игры добавляется GCK(Game Calendar Kit), ему выставляются начальные данные то есть год, месяц и день начала отсчета.

Изображение

После запуска создается новый календарь с этими данными, он работает не зависимо от текущей даты на устройстве. Это значит что изменив дату на устройстве, дата игрового календаря не измениться.
Дата игрового календаря меняется при двух обстоятельствах:
1. Время активной фазы закончилось до полуночи и был запущен новый день(для этого есть специальный метод)
2. Время активной фазы перевалило за 00:00, новый день установился автоматически.

Активная фаза и скейл игрового времени.

Время в активной фазе работает по таймеру, по этому опять изменение даты ничего не даст.

gif c таймером тут - http://i.imgur.com/4tUkUFL.gifv в этом примере одна игровая минута равна одной реальной секунде.

Надеюсь я ответил на вопрос про взлом и использование времени с устройства )

9К720Участникwww22 мая 201718:29#6
Gravideots
Чушь какая-то. После того как приложение остановят и перезапустят оно откуда возьмет время?

Правка: 22 мая 2017 18:29

GravideotsПользовательwww23 мая 201715:15#7
9К720 а в чем именно чушь?

Выставляем 1 января 2020 года, запускаем апп. Отсчет времени начнется с 1 января 2020 года, после остановки и перезапуска данные  опять возьмутся из установленных: 1 января 2020 года.

Правка: 23 мая 2017 15:19

jaguardУчастникwww23 мая 201716:19#8
Какой полезный ассет! Тут еще в соседнем треде человеку надо отрезать от float целую часть - для него тоже ассет надо выпустить.
9К720Участникwww23 мая 201716:42#9
Gravideots
> Выставляем 1 января 2020 года, запускаем апп. Отсчет времени начнется с 1
> января 2020 года, после остановки и перезапуска данные опять возьмутся из
> установленных: 1 января 2020 года.
То есть все что делает твой ассет это читает время из конфигов и запускает таймер? Серьезно? Я конечно слышал что юнити-девелоперы все  тупорылые как пробки поголовно, но не знал что настолько.
9К720Участникwww23 мая 201716:43#10
jaguard
> float целую часть - для него тоже ассет надо выпустить.
И отдельный чтобы дробную часть отрезать.
GravideotsПользовательwww23 мая 201720:22#11
9К720

Спасибо за наводку, после твоего комментария знаю что добавить в ассет. Но вообще нет, это не все что он умеет делать. С полным списком можешь ознакомится выше, я специально его выделил. Если из описания будет все же не понятно, ниже есть обзорное видео и ссылка на демо-версию.

Относительно твоих обобщений, я собрал короткий список разработчиков использующих Unity можешь направить им свои негодования и обязательно расскажи как надо делать:

Playdead -
Campo Santo -
Square Enix Montréal -
Valve -  http://www.valvesoftware.com/email.php

GravideotsПользовательwww23 мая 201720:55#12
jaguard

Ассет и правда полезный, сам его использую.

Почитал указанный тред про разделение, человек сам решил вопрос и заинтересовался вариантами решения. Как его пытливость ума была связанна с этим ассетом, не совсем понимаю.

На всякий случай уточню, я предлагаю готовое решение комплексной проблемы: Организацию игрового календаря и создание в нем событий.

Если есть идея как сделать его лучше, я бы с радостью её увидел.

nabokПользовательwww15 июля 201719:40#13
jaguard
кстати, а разве нельзя такое сделать
 float - (float) (int) float
? я всегда думал что должно работать

UPD: Работает... правда, немного не так как ожидалось)) совсем немного)) после такого хочется пойти на завод работать...

Правка: 15 июля 2017 19:43

zlosПостоялецwww15 июля 201720:26#14
А в чём смысл календарю быть MonoBehaviour и жить на GameObject?

Страницы: 1 2 3 Следующая

/ Форум / Программирование игр / Игровая логика и ИИ

2001—2017 © GameDev.ru — Разработка игр