Adobe Air. Спасибо, что живой
Эта запись по мотивам дискуссий в Twitter, где мы «всем селом» активно обсуждали будущее AIR.
Как вы помните, еще совсем недавно, буквально год назад, я активно болел за AIR. А именно, возлагал большие надежды на эту технологию, и в случае окончательной и бесповоротной смерти Flash я рассчитывал перейти на AIR. Еще год назад Flash был чуть более живой, чем сейчас, но уже тогда его судьба была предопределена. Поэтому я активно искал пути отступления и возможность перехода на другую платформу. ? первым в списке платформ, на которые я хотел уйти был, конечно же, AIR.
Почему AIR?
Не смотря на то, что в AIR не было практически никаких преимуществ перед любыми другими платформами, я желал перейти именно на него по одной простой причине: это моя зона комфорта!
Проведя в работе над Flash-играми не один год, мне было очень грустно бросать Action Scritpt 3. Ведь это не только привычка к уже опробованным инструментам, использование проверенных библиотек, но и огромный багаж знаний о том, как правильно писать код, понимание слабых и сильных сторон языка. В общем, речь ведь шла практически о том, чтобы выкинуть и забыть весь этот опыт, накопленный за годы работ, и я старался найти причины и объяснения, почему этого не делать. Я боролся и хватался, как мог, за AS3.
Только вот беда, моя любовь к платформе затуманила мне глаза и не позволяла взглянуть на суть вещей трезвым взглядом. Нет, я конечно же, понимал, через что мне предстоит пройти, чтобы работать с AIR, но я не хотел осознавать всех тех последствий, которые могли возникнуть.
Когда я собирался переходить на AIR я активно изучал этот вопрос. Уже тогда я примерно старался оценить свои силы и возможности. Я реально был оптимистом. Я смотрел на Starling , смотрел на его сильные и слабые стороны, и пытался придумать, как можно переписать или адаптировать Anthill под аппаратную поддержку. Более того, появились даже энтузиасты, которые были готовы мне помочь с этим, и у нас образовалась небольшая Skype-группа, в которой мы обсуждали возможное развитие движка. Только вот дальше обсуждений дело не пошло.
Объем работ предстоял быть большим. То, что я сделал один на протяжении нескольких лет, постепенно разрабатывая Flash-игры и аккуратно компонуя и собирая небольшой Framework (не без недостатков конечно же), нам предстояло переписать в более короткие сроки на чистом энтузиазме, и мы просто не знали с чего начать.
Попутно я пытался решить вопрос с новой игрой. ? тут, как вы помните, я пытался протолкнуть идею новой игры на AIR — но эта идея не находила понимания у издателей. Причем, речь не про одного какого-то мифического издателя, а про нескольких разных издателей, которые все как один хотели видеть новые игры на Unity. Я сопротивлялся и настаивал на своем, но ни к чему хорошему это не привело.
Работа над движком тоже так и не пошла. Поковыряв разные библиотеки и общие возможности AIR, стало понятно, что это последнее, что стоит использовать для проектов выше среднего. Но почему?
Первое, что я сделал: я начал поиски интересных проектов на AIR. Но по факту оказалось, что игр на AIR очень мало. ? среди них есть даже крупные игры, но это скорее исключение, чем правило. Так что же с AIR не так!?
AIR и производительность
Одна из самых актуальных проблем AIR заключается в его производительности. Если в двух словах, то все упирается в достаточно тормозной AS3 и виртуальную машину, которая используется для «проигрывания» наших Flash-программ внутри AIR. Здесь было бы неплохо привести примеры тестов с их результатами, но уверяю вас, их так много, что они легко гуглятся, поэтому я не стал тратить время на создание своих. Безусловно AIR все еще обновляется и в некоторых обновлениях даже может похвастать более высокими показателями производительности, но они все еще далеки до идеальных.
@AntKarlov @dragosha Перформанса у Unity3D больше, чем у AIR. Да. У UE4 больше, чем у Unity3D. А у самописа на C++ еще больше. Берем С++?
— Anton Azarov (@TheRabbitFlash) November 8, 2016
Конечно же, фанаты AIR могут оспорить сей факт: «Зачем тебе 100500 спрайтов рендерить!?». Но, как показывают тесты, тормозит не только рендер, но и весь код в целом, а это означает, что запас производительности лимитирован и значит большой и сложный проект будет написать проблематично, упираясь в потолок производительности. А если речь идет о 3D?
@AntKarlov @dragosha я вижу, что ты дальше Zombotron не смотришь и не видишь, что игры разные бывают ;) RTS 2шт вот, например. Маленькие? pic.twitter.com/ypzbu7dJtK
— Anton Azarov (@TheRabbitFlash) November 8, 2016
? тут становится очевидно, почему нет больших игр на AIR — разработчики для более серьезных игр выбирают более серьезные движки и технологии, чтобы с запасом.
AIR и инструменты
Вторая проблема для меня заключается в том, что AIR не предоставляет какой-либо среды или IDE для работы. Все что дает AIR — это фактически низкоуровневое API, которое я могу использовать как угодно на свое усмотрение (речь в первую очередь про аппаратное ускорение). Таким образом, прежде чем приступать к разработке игры на AIR, мне нужно написать какую-то свою среду и инструменты или использовать сторонние, тут даже можно Flash IDE попытаться адаптировать. Но суть в том, что сторонних инструментов практически нет, а Flash IDE — это вариант уже от безрыбья. ? вот тут, оглядываясь на Unity и Unreal Engine, уже начинаешь крепко задумываться: стоит ли писать свой Unity или Unreal Engine на AIR?
@chu_wy @AntKarlov @WeslomPo @dragosha @Slava_Ra у большинства "более-менее" проектов старлинг всегда допиленный. Нельзя быть идеальным ;)
— Anton Azarov (@TheRabbitFlash) November 8, 2016
Если хочется разрабатывать игру, а не инструменты, то, конечно же, свой аналог Unity писать на AIR нет смысла — это сделали уже за нас. А если вы любите создавать свои инструменты и IDE, то прежде, чем решаться на такую авантюру сейчас, крепко подумайте над тем, нужно ли это кому-нибудь кроме вас!?
Flash топит AIR
Третья проблема AIR заключается в том, что Flash, сам не желая того, тянет на дно за собой и AIR. В связи с тем, что Flash все больше и больше теряет свою актуальность и востребованность, многие Flash разработчики уходят на другие платформы и движки. ?нтерес к Flash, к AS3 и как следствие к AIR падает. А это значит, что многие open source проекты, библиотеки, как для AS3, так и для AIR забрасываются и более не обновляются. Признаться, еще год назад эта проблема не выглядела так явно, как сейчас. Но когда, в ходе жарких дискуссий я побежал на GitHub в поисках свежих и актуальных движков под Flash, я с ужасом обнаружил, что более 50% различных библиотек и движков, которые когда-то были на слуху, на текущий момент не обновляются уже по несколько лет.
Впрочем, кого я обманываю. Ведь и год назад многие большие компании уже открыто сворачивали свои движки, например, Alternativa Platform более 2х лет назад свернула поддержку и развитие своего движка Alternativa 3D, потому что уже тогда все было понятно. А что на счет Flare3D? ?х блог замер на 2014 году! Но покопавшись на форуме становится очевидно, что и этот движок практически прекратил свое свое развитие, и использовать его сейчас можно только на свой страх и риск, и это при том, что это коммерческая разработка. ? такая ситуация с подавляющим большинством фреймворков и библиотек. Достаточно заглянуть в гиты самых известных: Flixel, FlashPunk чтобы осознать всю горькую правду.
Но фанбои AIR бьют себя пяткой в грудь и кричат: «Все же компилится и работает!». Но что делать, если вдруг после очередного обновления AIR оно перестанет компилиться и работать!? Лютый фанбой ответит: «Там обратная совместимость, не то, что у Unity!». Да, у Unity и правда проблемы с обратной совместимостью, но это явно не умирающая технология, у которой есть живой саппорт и регулярные обновления, и это совершенно обычная ситуация, когда обновление движка что-то может сломать. Но рассчитывать, что обновление умирающей платформы не сломает старый движок, который уже два года не обновляется и саппорта нет — это словно пойти по тонкому льду в надежде не провалиться.
@AntKarlov @WeslomPo @dragosha Ну вот мы расставляли всё и настраивали неделю на 5.3.1f (кажется). Перешли на 5.4.2 и все слетело в маканиме
— Anton Azarov (@TheRabbitFlash) November 8, 2016
Более того, речь тут даже не о библиотеках, которые могут отвалиться с обновлением чего-либо, сколько о том, что нужно иметь хоть какой-то задел на будущее, верно?
Давайте представим себе ситуацию: я сейчас бросаю Unity и начинаю с нуля писать игру и инструменты под AIR. Пусть это будет даже не Зомботрон, а что-то по-проще. Я вложу какое то время и силы в код и инструменты, потом выпущу игру на мобилки с расчетом заработать на рекламе, а рекламная сеть, через пару недель после релиза внезапно обновит свой API и перестанет поддерживать AIR, потому что на AIR у них крутится 100 игр, а на Unity или UE по 100500 на каждую. Соотвественно какой профит им поддерживать и обновлять API для AIR, когда лучше бросить эти силы на то, что более востребовано!?
?ли немного другой пример: я разработал игру с поддержкой геймпада, а у геймпада драйвера обновились или ОС целиком, и та сторонняя библиотека, что я использовал для упрощения работы с геймпадом сломалась. ?гра работает, все компилится, но геймпад не работает, потому что библиотека устарела и ключевые команды от драйверов обрабатываются не верно. ?гроки пишут злобные комменты, минусуют игру, требуют вернуть поддержку геймпада, а автор библиотеки о призывах о помощи отвечает: «Дружище, ты же видел, что уже три года нет обновлений? Ты сам себе злобный Буратино!». ? таких примеров может быть масса.
@sergebat @AntKarlov Я привел четкий пример. FZIP работает и добавить там нечего. Но она 2008 года. Зачем её обновлять? А Антона где пимеры?
— Anton Azarov (@TheRabbitFlash) November 10, 2016
Существуют библиотеки, которые работают годами без обновлений — таких библиотек тоже много, например какой-нибудь парсер для JSON или упаковщик данных, аля ZIP. Но, как не крути, добрая половина сторонних библиотек, конечно же, требует поддержки и обновлений. ? когда мы берем в проект брошенную библиотеку, мы должны учитывать возможный риск в будущем.
Конечно, речи не идет о том, что AIR бросят завтра или послезавтра. Но когда мы, как разработчики, принимаем решение на тему, что использовать, мы должны закладывать некоторую перспективу на будущее и понимать, что если мы беремся за дело, то даже если это и схлопнется, то явно не через год, и у нас будет время, чтобы пересмотреть стратегию со своим проектом.
Перспективы AIR
Тут сколько на кофейную гущу не смотри, уже и так очевидно, что у AIR нет будущего. Причины примерно такие же, как и у Flash, отсутствие развития, слабая поддержка и…. отсутствие кредита доверия!
У каждого разработчика и не только всегда есть определенный процент доверия к той или иной компании. Где доверие, там лояльность и вера в определенные инструменты и компанию в целом. Так вот, не знаю как у вас, а у меня к Adobe не осталось никакого доверия, тем более в том, что касается Flash.
У Flash по прежнему нет достойного технологического конкурента, но он мертв, как никогда. Flash Professional переименован в Animate CC, а новые фичи настолько скудны, что, установив старый добрый Flash CS4, разница с новым Animate CC будет заметна только в темном скине и бесцветных иконках. У Flex были отличные возможности, но эта технология так же выброшена в корзину. Конечно, энтузиасты еще используют Flex в своих проектах, но если говорить о серьезном бизнесе, то как можно строить серьезный бизнес из того, что перестали развивать и поддерживать и выбросили «на помойку»?! А что ждет AIR?
@AntKarlov @WeslomPo @dragosha Разница с AIR и Flex в "спишут" в том, что очень многие ждут этого, чтоб получить AIR в opensource.
— Anton Azarov (@TheRabbitFlash) November 8, 2016
@AntKarlov @crashy512 @dragosha Конечно не развивается. Случайно на днях выкатили Apple TV поддержку. Надо ли? Вопрос второй. Но не забили
— Anton Azarov (@TheRabbitFlash) November 8, 2016
Да, AIR все еще обновляется и поддерживается, даже появляются какие-то новые фичи. Но на активное развитие это уже не похоже, скорее обновления ради обновлений, впрочем, это лучше, чем ничего. Но знаете, мне все чаще кажется, что Adobe где-то на верху уже дернула рубильник отключения поддержки и развития Flash и AIR, просто из-за большой компании и как следствие бюрократии, сигнал до нужных людей дойдет только через два годика.
Стоит ли работать с AIR?
Не смотря на все выше написанное, AIR, конечно же, актуален и годится для решения некоторых задач. Если вы компания или команда разработчиков, которые успешно работают с AIR и зарабатывают с игр, с заказов или еще с чего-то, что как-то связанно с AIR, то очевидно, что нет смысла на ровном месте бросать эту технологию и срочно что-то менять.
Тут фанбои AIR часто любят мне писать: «Пока ты ругаешь AIR — кто-то на нем бабло гребет!». Так это же отлично! Вот если бы фанбои топили за AIR и при этом не зарабатывали бы на нем денег, вот тогда было бы совсем печально!
Но суть-то в другом: если уровнять количество разработчиков, зарабатывающих на AIR, на количество разработчиков, зарабатывающих на Unity, то сей аргумент выглядит по-детски глупо.
Так вот, если вы команда, работающая с AIR, и все у вас отлично идет — я лично никого не агитирую бросать AIR и бежать куда-нибудь еще сломя голову. Но, когда приходит новичок вроде меня, у которого нет инструментов и непонятно с чего начинать — то стоит десять раз подумать, прежде чем решаться на AIR. ? не стоит агитировать новичка баблом за AIR, так как прежде ему придется пройти через «медные трубы».
А с чем работать?
Фанбои считают, что если я против AIR, то значит я за Unity.
@AntKarlov @GameGems @WeslomPo @dragosha Приходит такой Карлов и говорит делай на Unity3D. А потом, через 6-7 месяцев - Юнити гамно, грит ))
— Anton Azarov (@TheRabbitFlash) November 9, 2016
Ну, во первых, я все еще не понимаю как можно сравнивать эти две совершенно разные платформы с совершенно разными возможностями. Unity можно сравнивать с Unreal Engine, или с Cry Engine или даже с Game Maker и Construct 2. Но, не с AIR, это уж точно! AIR для разработчиков игр дает ровным счетом ничего! Поэтому слезно прошу, не нужно ставить AIR на одну ступеньку с Unity и Unreal Engine, и даже на ступеньку с Game Maker или Constrcut 2 не стоит его ставить.
Во вторых, конечно логично, что раз уж я работаю сейчас с Unity, то вроде как я по умолчанию должен быть за него. Но это не так! Я слишком мало поработал с Unity, чтобы его полюбить и даже пропагандировать. Более того, я уже много разных игровых движков повидал, в том числе и до Flash и прекрасно понимаю, что каждый движок хорош по своему. Сейчас конечно времена другие, движки более навороченные и возможностей у них куда больше, не говоря уже об Asset Store, где практически всегда можно найти любой дополнительный функционал (кстати вы не знаете где у AIR ассет стор?).
Так вот, когда меня спрашивают какой движок выбрать, я никогда не посоветую Unity, потому что я на нем работаю. Я всегда рекомендую отталкиваться от целей и задач, которые нужно оценить и найти оптимальное решение. Даже выбирая между UE и Unity — будет та еще задачка, так как у каждого движка есть свои слабые и сильные стороны.
Чтобы выбрать хороший движок для своей игры, нужно ответить на несколько простых вопросов:
- Какой жанр, какая аудитория?
- Какой вид 3D или 2D, будет ли физика?
- Какая платформа: ПК, веб, консоли, мобилки, другие?
- Вы тру инди и планируете разрабатывать игру ради удовольствия в свободное время от основной работы?
- Какой бюджет на движок/разработку, есть ли бизнес план?
- Есть ли готовый код/графика/анимации, которые нужно адаптировать под новый движок?
Далее, исходя из ответов на выше представленные вопросы уже делать свой выбор, рассмотрев разные варианты. Признаться, сейчас я советую выбирать из Unity, Unreal Engine, Game Maker и Construct 2 — так как эти движки сейчас наиболее актуальны и соответствуют разработке игр, так как имеют практически весь необходимый функционал. Кроме выше перечисленных движков есть и другие, которые так же следует рассматривать. А вот AIR и Flash уже давно вышли из этого списка как мало имеющие отношение к современному гейм-деву, и как следствие потеряли актуальность.
НО! Если вы в прошлом флешер и хотите попробовать свои силы на мобилках или даже портировать свой Flash-шедевр на мобилки или в Steam максимально быстро и без лишнего стресса связанного с освоением новой технологии и покупкой дополнительных инструментов, то вам определенно стоит пробовать и использовать AIR для решения поставленной задачи, а почему нет? :)
Заключение
В игровой индустрии балом правят не технологии, а игры. Как правило, для игрока не важна какая технология была взята и использована для той или иной игры. Поэтому технология важна только для разработчика — это ключ к успеху разработчика, к тому как он быстро и удобно сможет использовать выбранную технологию для достижения своей цели, для создания своей игры.
@AntKarlov @WeslomPo @dragosha ты продай зомботрон новый, тогда будем говорить. Масса знакомых, кто на unity в стиме заработали мало очень
— Anton Azarov (@TheRabbitFlash) November 8, 2016
Часто обновляемые и развивающиеся технологии — это всегда преимущество. Развлечения не стоят на месте, все постоянно меняется и растет, приходят новые возможности вроде VR и контроллеры. ? разработчики вроде меня, боящиеся выходить из своей зоны комфорта, имеют больший риск проиграть в этой битве за выживание. Никому не важно сколько времени потратил разработчик на создание своих инструментов или использование чужих — важен только результат, которого он в итоге достиг. Поэтому успешен будет тот, кто сможет балансировать на грани между созданием инструментов и разработкой классной игры.
Никакая игра не обходится без своих уникальных инструментов, которые создаются под конкретную игру. Но если работать только над инструментами, то и до игры руки не дойдут. Поэтому движок нужно выбирать тот, который поможет вам, а не тот, который заберет на себя слишком много времени. ? вот, поскольку AIR не имеет ничего для разработки игр (сторонние библиотеки уже не в счет) — эта платформа как была, так и останется навсегда на скамейке запасных в гейм-деве.
@PRogozin @AntKarlov @crashy512 @dragosha Карлов часто сам себе противоречит с переходом на Unity. Лучше Придюка послушайте о Defold :)
— Anton Azarov (@TheRabbitFlash) November 8, 2016
@PRogozin @AntKarlov @crashy512 @dragosha У Карлова понятия какие? Если игра продалась - крутой движок. Если игра говно - потому, что флеш.
— Anton Azarov (@TheRabbitFlash) November 8, 2016