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

[UNITY] Плагин "рабочего дня" (2 стр)

Поделиться

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

Polyflow3dПостоялецwww15 июля 201723:30#15
Gravideots
Ассет и правда полезный, сам его использую.


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

MaximYariloПостоялецwww16 июля 201713:45#16
Сначала придумываем несуществующую проблему,  а потом героически её решаем. Вот ещё идеи ассетов:
  • АИ губки боба в условиях невесомости. Можно использовать в играх про губку боба в космосе
  • поиск пути в условиях отсутствия пути. Можно применять когда какие- нибудь игровые события влияют на принятие решения
  • ассет физической симуляции молекул газа в условиях изменеия температуры и давления.  Можно сделать забавную игру с физикой молекул
  • и наконец,  вообще бомба!  Ассет выдающий звук сверчка в зависимости от многих параметров. В том числе можно интегрировать ваш ассет календаря, чтобы сверчки могли петь по расписанию
  • GravideotsПользовательwww17 июля 201717:27#17
    zlos
    > А в чём смысл календарю быть MonoBehaviour и жить на GameObject?

    Основой для этого решения является использование InvokeRepeating в компоненте тикера. Изначально хотелось сделать все через System.Timers.Timer, но в связи с отсутствием многопоточности в браузерах(Не хотелось упускать WebGl) пришлось использовать такой вариант.

    GravideotsПользовательwww17 июля 201717:28#18
    Polyflow3d

    В паблике пока нет.

    GravideotsПользовательwww17 июля 201720:01#19
    MaximYarilo
    > Сначала придумываем несуществующую проблему,  а потом героически её решаем.

    Разве игры делают по другому?

    Polyflow3dПостоялецwww18 июля 201719:25#20
    Gravideots
    Основой для этого решения является использование InvokeRepeating в компоненте тикера. Изначально хотелось сделать все через System.Timers.Timer, но в связи с отсутствием многопоточности в браузерах(Не хотелось упускать WebGl) пришлось использовать такой вариант.

    считать время кастомным велосипедом основанным на InvokeRepeating? Я большей жести еще не видел.
    Я наверное поломаю вам бизнес, но как на счет UnityEngine.Time?

    GravideotsПользовательwww18 июля 201722:06#21
    Polyflow3d
    > считать время кастомным велосипедом основанным на InvokeRepeating? Я большей
    > жести еще не видел.

    А в чем жесть? Удобный метод, работает на всех платформах, позволяет выставлять частоту срабатываний.

    > Я наверное поломаю вам бизнес, но как на счет UnityEngine.Time?
    Зачем писать реализацию на Update если можно обойтись без нее и использовать уже готовое решение от разработчика платформы?

    MisanthropeПостоялецwww18 июля 201722:23#22
    нужен плагин "@бучего дня"
    Polyflow3dПостоялецwww19 июля 20176:26#23
    Gravideots
    еще раз повторяю - Time.time.
    The time at the beginning of this frame (Read Only). This is the time in seconds since the start of the game.

    для альтернативно одаренных объясняю - это время с начала игры.
    Тупо.
    Если ты хочешь где то аккумулировать общее время игры, то в начале игры читаешь прошлое время в конце игры прибавляешь к нему Time.time.
    И это все.
    Какие на..р плагины, какой InvokeRepeating, какие потоки?

    tacПостоялецwww19 июля 201712:47#24
    ссылка идет на гитхаб , а не на ассет стор, скачать то где?
    tacПостоялецwww19 июля 201712:50#25
    короутины не пробовали просто использовать? другое дело, если календарь управлял бы всеми событиями в игре

    Правка: 19 июля 2017 12:51

    GravideotsПользовательwww19 июля 201717:42#26
    tac
    > ссылка идет на гитхаб , а не на ассет стор, скачать то где?
    Спасибо, поправил.

    > короутины не пробовали просто использовать? другое дело, если календарь
    > управлял бы всеми событиями в игре

    Думал об этом, пока не пришел к какому то решению. На текущий момент производительности Invoke хватает, но вероятно в целях оптимизации нужно будет переписать.

    GravideotsПользовательwww19 июля 201719:22#27
    Polyflow3d
    Предлагаю смоделировать ситуацию:

    Игра про котельную.

    Игра начинается в 12:00 21 января 1955 года.

    Котельная работает с 23:00 до 06:00.

    Так как это игра должны происходить какие то события, часть из них можно создать рандомно но ключевые придется создавать заранее - допустим одним из таких событий будет авария 23 января в 03:04 и время на устранение аварии всего 35 игровых минут, если игрок не успевает гейм овер.

    Что бы не ждать 2-е реальных суток мы ускорим игровое время в 10 раз.

    Итого у нас есть следующие задачи:

    • Установить стартовую дату на 12:00 21 января 1955 года
    • Считать и отображать игровое время и дату от указанной даты начала
    • Иметь возможность скейлить время без влияния на остальной процесс игры
    • До запуска игры подготовить событие на определенное время с точностью до минуты
    • Запустить событие в указанное время
    • Завершить событие в указанное время
    • Провести проверки на успех или провал действий игрока.
    • Позволять игроку останавливать игру в любой момент и продолжать с места остановки

    Как можно реализовать такую логику при помощи Time.time?

     

    tacПостоялецwww19 июля 201720:40#28
    Gravideots
    > Как можно реализовать такую логику при помощи Time.time?

    базис

    private float time;

    public void Update()
    {
            if (Status == AgentInputStatus.Active)
            {
                time += Time.deltaTime;
      }
    }

    void OnGUI()
    {
                    string Info = "";
                    int minutes = (int)(time / 60);
                    int hour = (int)(minutes / 60);
                    minutes = minutes % 60;
                    int seconds = (int)(time % 60);

                  Info += "Время: " + hour.ToString().PadLeft(2, '0') + ":" + minutes.ToString().PadLeft(2, '0') + ":" + seconds.ToString().PadLeft(2, '0');
    }

    давно надо было бы мне это упорядочить у себя, есть куча разных кусков про время, но в компонент не выделял еще, хотя примеров использования куча

    я бы поучаствовал в улучшении вашего компонента, если вам интересно это

    tacПостоялецwww19 июля 201720:57#29
    есть другой подход (в моем же коде), бардак конечно, надо формализовывать когда что лучше

    отрывок думаю из него поймете, заменяет Time.deltaTime

      Clock oProcessClock;
      public IEnumerator Tick()
      {
        while (true)
        {
          if (oProcessClock != null)
          {
            oProcessClock.SetTimer(oProcessClock.CurrentTime + oProcessClock.Direction);
            RefreshProgress();
          }
          yield return new WaitForSeconds(1.0f);
        }
      }

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

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

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