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

В данной публикации речь пойдет о перспективном и достаточно молодом игровом движке, который незаслуженно остался в тени таких гигантов, как 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
    25.02.2019 11:47
    +3

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


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


    1. PkXwmpgN
      25.02.2019 12:27

      Добавлю


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


    1. TBDesignes Автор
      25.02.2019 13:07

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


    1. p4p
      25.02.2019 13:44

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


      1. TBDesignes Автор
        25.02.2019 14:04

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


        1. p4p
          25.02.2019 18:01

          UI/Mobile


          1. TBDesignes Автор
            25.02.2019 18:35

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


            1. p4p
              25.02.2019 19:16

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


              1. Goldseeker
                26.02.2019 11:48

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


                1. p4p
                  26.02.2019 16:01

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


  1. SH42913
    25.02.2019 13:07

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


  1. inferrna
    25.02.2019 13:35
    -2

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


  1. fareloz
    25.02.2019 14:12

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


  1. Sirion
    25.02.2019 15:30

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


    1. Goldseeker
      25.02.2019 15:51

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


  1. PkXwmpgN
    25.02.2019 16:00

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


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

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


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


  1. jimmyjonezz
    27.02.2019 17:45

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