Duality — легкий и быстрый движок для игростроя под Windows (Доп.) +4



Приветствую, читатель.

В данной публикации речь пойдет о перспективном и достаточно молодом игровом движке, который незаслуженно остался в тени таких гигантов, как Unity или Unreal Engine.

Разработчиками является объединение энтузиастов под руководством Adam's Lair.

Как нам говорит официальный сайт: «Duality — это модульный игровой 2D-движок, поставляемый вместе с собственным редактором. Он легко расширяем, написан на C# и использует OpenGL для вывода графики.» Для написания логики в Duality применяется популярная компонентно-ориентированная архитектура. Написали компонент, прикрепили к игровому объекту и все работает, полностью избавляя программиста от рутины. Еще одним преимуществом является поддержка плагинов, которые любой желающий может создавать и подключать к своим проектам.

— Классика, — скажете вы и будете правы. Duality не хуже других инструментов, он также берет на себя управление ресурсами, предоставляет подсистемы ввода-вывода, графику, аудио и симуляцию физики. Если к этому добавить удобный редактор Dualitor, то можно получить превосходную среду для разработки инди-игр.

Так зачем мне нужен Duality, когда есть более обширные решения вроде Unity?


  • Бесплатность (MIT License). Вы не обязаны платить, публиковать свои исходники и совершать прочие ограничивающие ваше творчество действия. Исходники Duality тоже доступны на GitHub.
  • Легковесность. Редактор весит ~100 мб, полностью рабочая игра весит ~7 мб.
  • Быстродействие. В последней на данный момент версии v3 проделана масштабная оптимизация движка. В проведенных тестах на предполагаемую загруженность, время отрисовки в худшем случае не превышало 6 мс, а сборки мусора проводились около пяти раз в минуту.
  • Простота. Если вы знакомы с тем же Unity или Unreal Engine, то освоить Duality сможете без проблем. API хорошо документировано и предоставляет удобные интерфейсы для того, чтобы программист не отвлекался на низкоуровневые операции.
  • Сообщество. Возможно оно не исчисляется тысячами пользователей, но в нем присутствуют преданные разработчики, которые самолично помогают новичкам в освоении движка. Очень дружелюбно и своевременно. Кроме того, созданы различные туториалы и открыт форум, на котором содержится большое количество полезной информации.

Возможно, это стоит попробовать


Думаю, вы хотите увидеть, как это все выглядит.

Редактор. Простовато, но функционально. В нем видны привычные нам Scene View, Project View, Inspector и Camera View. Внизу находится скрытая панель логов.

Dualitor


А это пример кода для компонента, который управляет перемещением космического корабля.

Код
using Duality;
using Duality.Components.Physics;
using Duality.Input;

namespace Duality_
{
    [RequiredComponent(typeof(RigidBody))]
    public class Player : Component, ICmpUpdatable
    {
        public void OnUpdate()
        {
            RigidBody rb = GameObj.GetComponent<RigidBody>();

            if (DualityApp.Keyboard[Key.Left]) rb.ApplyLocalForce(-0.001f * rb.Inertia);
            else if (DualityApp.Keyboard[Key.Right]) rb.ApplyLocalForce(0.001f * rb.Inertia);
            else rb.AngularVelocity -= rb.AngularVelocity * Time.TimeMult * 0.1f;

            if (DualityApp.Keyboard[Key.Up]) rb.ApplyLocalForce(Vector2.UnitY * rb.Mass * -0.2f);
            else if (DualityApp.Keyboard[Key.Down]) rb.ApplyLocalForce(Vector2.UnitY * rb.Mass * 0.2f);
        }
    }
}



Не знаю как вы, а я приятно удивлен простотой этого фреймворка. Кстати, показателем успешности движка являются игры, сделанные на нем. Поскольку его используют небольшие команды, то и игры выпускают не уровня ААА. Так что похвастаться пока особо нечем. На этом сайте вы можете посмотреть готовые игры.
Еще мне известен один серьезный проект, на данный момент находящийся в разработке и выложенный в Steam, но об этом лучше написать в другой раз.

Чего от Duality ожидать не стоит


Кроссплатформенность движка является одной из его слабых сторон. Полностью поддерживается только ОС семейства Windows, остальные либо поддерживаются сторонними разработчиками, либо не поддерживаются вообще. Так же отсутствует встроенная реализация UI, но поскольку Duality является модульным движком, то существуют плагины, которые устраняют этот недостаток.
Следующим серьезным минусом будет проблема сетевого API. На данный момент не существует плагина или модуля ядра, который бы реализовал мультиплеерные возможности.
И главная причина, по которой движок проигрывает конкурентам — немногочисленное сообщество. Слишком мало людей, которые занимаются развитием этого хорошего инструмента.

Основные возможности движка:


  • 2D-физика на основе Farseer Physics Engine. Среди встроенных компонентов есть функциональный Rigidbody, который покрывает основные требования к физическим объектам.
  • 2D-анимация с помощью компонента AnimSpriteRenderer. Вместе с простой системой пользовательского ввода можно легко анимировать любого персонажа.
  • Поддержка вершинных и фрагментных шейдеров. Если этого будет мало, то вы можете реализовать свой собственный компонент для рендеринга.
  • Префабы, в том числе и вложенные, так что проблем с заготовкой игровых объектов не возникнет.
  • Удобный контент-менеджер. Ссылки на ресурсы автоматически поддерживаются и легко используются в коде.
  • TileMap'ы были созданы как отдельный плагин, но прекрасно используют возможности движка для максимальной производительности.
  • Расширяемость редактора. Вы можете добавлять в редактор свою собственную функциональность, писать команды и плагины, которые будут нужны именно под ваши задачи.


В заключение этого краткого обзора хочу сказать, что существует множество других игровых движков, которые возможно не уступают данному и это хорошо. Я, конечно, не призываю вас бросать все, чем вы уже пользуетесь, но представляю вашему вниманию качественный проект. Если вы разработчик-одиночка или небольшая команда, которая ищет что-то простое и достаточно мощное, попробуйте Duality.

Официальный сайт.

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (17):

  1. Goldseeker
    /#19801526 / +3

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


    • Как дела с кроссплатформенностью?
    • А с многопоточностью? Тяжело ожидать поддержки многопоточного вызова апи, но хотя бы функции асинхронной загрузки ресурсов есть?
    • Nested prefabs?
    • Встроенная UI система?
    • Есть ли средства отладки и профилирования?

    • PkXwmpgN
      /#19801852

      Добавлю


      • Как дела с сетью?
      • Есть ли какая-нибудь поддержка видео, открытых кодеков, например, theora?
      • Что с анимациями, поддерживается ли spine?

    • TBDesignes
      /#19802146

      Хорошо, спасибо за отзыв, в скором времени я дополню статью.

    • p4p
      /#19802396

      Как я понял это Unity на минималках. Все вами перечисленное на официальном сайте я не нашел. Возможно это есть, но в "хорошей" документации не упоминается.

      • TBDesignes
        /#19802532

        Что конкретно вы не нашли?

        • p4p
          /#19804124

          UI/Mobile

          • TBDesignes
            /#19804366

            Про UI я дополнил. Про доступные платформы сказано — поддерживается только Windows.

            • p4p
              /#19804598

              «Так же отсутствует встроенная реализация UI, но поскольку Duality является модульным движком, то существуют плагины, которые устраняют этот недостаток» — очень информативно.
              Duality не хуже других инструментов. Зачем писать модульные велосипеды, если есть Unity — с превосходным UI и кроссплатформенностью? Редактор вообще плагиат Unity Editor.

              • Goldseeker
                /#19807344

                Попрошу, UI в юнити далек от превосходного — от произвоидительности до крайне спорных дизайн решений. Движки поменьше вполне могут выиграть у юнити сфокусировавшись на проблемных местах: размер билда и производительность. Другой вопрос что Duality похоже не этот случай.

                • p4p
                  /#19808830

                  Удобнее инструмента я не знаю. Производительность == прямые руки.

  2. SH42913
    /#19802148

    Звучит, вцелом, неплохо, но статья, конечно, маловата и не дает полного представления.
    Тем не менее обязательно попробую как-нибудь на досуге.

  3. inferrna
    /#19802326 / -2

    Вот сейчас бы в 2к19 добровольно ограничивать себя единственной платформой, пусть даже это Window$.

  4. fareloz
    /#19802592

    Картинки не загружается, пишет превышен лимит хостинга imgbb

  5. Sirion
    /#19803114

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

    • Goldseeker
      /#19803316

      На боль и страдание можно расчитывать с любым движком.

  6. PkXwmpgN
    /#19803380

    Ну т.е. по сути
    Не кроссплатформенный (это важно, потому что если мы говорим о небольшой двумерной игрушке, то со временем она захочет перекочевать и на мобильные платформы), нет сети, нет UI, нет скриптов, нет профайлеров, нет spine-анимаций, с многопоточностью тоже скорее всего плохо.
    Ну и на рендер нужно посмотреть внимательно еще, является ли он многопроходным, как это конфигурируется, есть ли постобработка, поддерживается ли сжатие, есть ли система частиц и т.д.?


    Не знаю как вы, а я приятно удивлен простотой этого фреймворка

    Простой потому что там ничего нет


    В итоге
    Компонентная модель + "напиши все что тебе нужно сам" != игровой движок

  7. jimmyjonezz
    /#19814562

    Конкурентами этого движка вполне могут быть Defold или Godot Engine. Последний, кстати, очень активно развивается и находится на втором месте на github'е.