New Zombotron 3. Неделя #5

Реализация стрельбы — это чуть больше, чем просто создание пуль и отправка их в полет. Это весьма интересный процесс, который тесно переплетается непосредственно с анимацией персонажа.

С самого начала работы над игрой много приходиться работать непосредственно с анимацией, но при реализации стрельбы мне пришлось чуть больше погрузиться в эту тему. Ранее я уже немного рассказывал о своих приятных впечатлениях от Spine и всячески хвалил его. Теперь же настало время рассказать о некоторых тонкостях, с которыми мне пришлось столкнуться.

В Professional версии Spine существует такая замечательная штука, как Обратная Кинематика. Если в двух словах, то обратная кинематика позволяет создавать анимации, которые могут программно изменяться, то есть реагировать на внешние факторы. Более того, даже если не использовать обратную кинематику непосредственно в игре, то настройка кинематики в Spine так же помогает в работе над созданием анимаций для персонажей.

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

Слежение за курсором мыши

Подобный функционал с использованием Spine реализуется достаточно просто и не требует дополнительных навыков. Все кости из Spine-анимации доступны, как объекты, и можно читать и изменять их положение. Конечно не обходится без плясок с бубнами в виде переведения глобальных координат в локальные, и необходимость учета разворота всего персонажа, но в целом никаких подводных камней.

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

Формула вычисления следующая:

  • Вычисляем угол между плечом и положением курсора мыши.
  • Поворачиваем точку пушки на заданный угол вокруг плеча.
  • Применяем новые координаты точки пушки непосредственно к кости в анимации.

 

Таким образом, я заготовил следующего персонажа:

Сам персонаж, как и настройки скелета — это далеко не идеал, поэтому не следует его принимать за эталон. Это тестовый персонаж, с которым я набиваю шишки.

  • Axle — это ось, вокруг которой мы вращаем пушку (используется как ключевая точка для расчета нового положения Key Bone).
  • Key Bone — это ключевая кость, которая задает угол поворота пушки.
  • Bullet Place — место, где появляются пули.

 

Как видно на картинке, работа костей рук настроена через обратную кинематику. Таким образом, если ключевую кость вращать вокруг плеча, то мы получим весьма реалистичное прицеливание. Все супер! Но есть одна маленькая проблемка: я сделал замечательные анимации бега, ожидания и т.п.

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

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

Решение оказалось очень простым, даже анимации переделывать не пришлось! В Spine реализована древовидная система костей и те кости, что вложены друг в друга, наследуют трансформации предков, что логично. Таким образом решение выглядело следующим образом: я вложил ключевую кость в другую родительскую кость, которая не имеет никаких анимаций и получилось так, что ключевая кость теперь не участвует в коде, и её анимация работает как положено. Но при этом, если двигать родительскую кость — то ключевая кость, как ребенок, корректно обрабатывает свою анимацию и позиционируется относительно родителя в локальном пространстве.

В итоге я получил нужный результат!

Стрельба

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

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

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

Решение очевидно, пуля должна лететь не в сторону курсора мыши, а в том направлении, куда направлена пушка в текущий момент времени! Но как узнать куда она направлена именно сейчас, между какими точками считать угол?!

Решение как всегда оказалось простым, но мне пришлось повозиться, прежде чем я нашел его, так как изначально скелет был настроен с ошибкой. Но все же, основная идея заключается в том, чтобы считать угол между костью пушки и местом появления пуль (Bullet Place).

Сработает этот трюк только в том случае, если локальные координаты положения кости пушки (Weapon Bone) и положения точки появления пуль (Bullet Place), переводить в глобальные координаты. В противном случае, если координаты будут локальными, то угол будет всегда одинаковым. В моем же случае, если внимательно смотреть на картинку, можно увидеть, что кость пушки (Weapon Bone) находится немного ниже, чем место появления пуль (Bullet Place) и получается точно такая траектория, как на картинке (эффект кривого ствола). Конечно, когда я настраивал скелет, я совершенно не задумывался, что мне придется использовать кость пушки для расчетов и не позаботился о её правильном расположении. В итоге, в конце одного из рабочих дней, неправильное расположение костей потрепало мне нервы и я не сразу понял, почему пули летели криво, а мою ошибку наглядно продемонстрировать мне было не кому :)

Тут следует сделать небольшое отступление и отметить: как раз по всем этим причинам герой такой косой-кривой, ноги отдельно, анимации кривые и вообще... В процессе разработки, а тем более в процессе работы с новыми инструментами, активно набиваются шишки и имеются некоторые упущения. ? когда очередная недоработка внезапно определена — это совсем не повод сразу же переделывать героя на чистовую и вылизывать его до релизного состояния, так как в будущем еще обязательно что-то вылезет и придется все опять по кругу переделывать. Поэтому я делаю заплатку и двигаюсь дальше. А когда все тонкости создания анимации персонажей будут известны и понятны — только тогда можно будет приступать к чистовой работе над персонажами и их анимациями.

В итоге, когда причина «кривости ствола» была выявлена, я сделал маленькую заплатку: на этапе инициализации героя вычисляем постоянный угол между костью оружия (Weapon Bone) и местом появления пуль (Bullet Place), сохраняем это значение, как погрешность в угле поворота оружия, и далее при расчетах отнимаем эту погрешность от реального угла поворота оружия!

Но все выше описанное — это лишь мелочи, дальше интереснее.

Одновременное воспроизведение разных анимаций

Помимо перемещения, прыжков и прицеливания, главный герой конечно же должен делать еще и другие интересные штуки, например: стрелять, перезаряжать оружие, взаимодействовать с другими объектами и т.п. Ничего особенного вроде, но вся суть в том, что некоторые действия должны совмещаться. Например: бежим и стреляем или перезаряжаем оружие, может быть бросаем гранату, или крадемся на корточках. То есть, одновременно должны воспроизводиться две анимации: перемещение и стрельба.

В случае с Flash технологией особых сложностей не было. Был герой, который состоял из разных частей, и каждая часть была анимирована, как мне нужно было: ноги — это была отдельная часть героя, а руки — другая часть героя, и тут я мог легко контролировать анимацию каждой отдельной части, не о чем не переживая. Конечно, мне приходилось и героя экспортировать в игру частями и конструировать кодом, но это уже все технические мелочи.

В Spine, как известно, персонаж собирается сразу в один целый объект. ? тут мне было очень интересно понять, как я могу управлять отдельными частями тела, то есть воспроизводить отдельную анимацию для каждой из них. Например, для ног анимацию бега, а для рук анимацию стрельбы?

Хочу сразу сказать, что в целом Spine неплохо продуман и решение имеется, но пришел я к этому решению не быстро, пришлось по общаться с другими разработчиками и бороздить форумы на эту тему.

?так, суть задачи: воспроизвести для ног анимацию бега, а для рук анимацию стрельбы, да так чтобы между анимациями была интерполяция и глазу не за что было бы зацепиться. Для решения подобных задач в Spine реализована возможность приоритетного воспроизведения анимаций, или еще это называют многослойной анимаций.

Суть такова: мы можем запустить одновременное проигрывание двух разных анимаций, например анимацию бега и анимацию стрельбы, но задав при этом более высокий приоритет для анимации стрельбы. Таким образом все ключевые кадры из анимации стрельбы перекроют ключевые кадры из анимации бега. Поскольку для ног и тела в анимации стрельбы нет ключевых кадров (только для рук и пушки), то анимация бега практически не пострадает и произойдет только замена кадров для оружия и рук.

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

В целом, все работает хорошо, но есть один маленький нюанс. После того, как анимация выстрела (анимация в более приоритетном слое) закончила свое проигрывание, те части тела, ключевые кадры которых были подмененны, переходят в состояние анимации с более низким приоритетом без какой-либо интерполяции. То есть, резко перескакивают на положенные им места.

Слева мой персонаж, справа тестовый персонаж из Spine. Я экспериментировал с настройками сглаживания переходов, а так же применял различные трюки вроде рестарта текущей анимации с текущего положения, но проблема полностью уходить не хотела. После небольшого копания форумов и обсуждения этой проблемы с другими разработчиками, имеющими опыт работы со Spine, я пришел к следующему решению: необходимо полностью разделить анимации на верхнюю и на нижнюю, анимации персонажа должны быть изначально всегда разделены и всегда проигрываются отдельно. То есть, решение получается наиболее близким к тому, как это было во Flash. Сделать это просто.

Персонаж в Spine анимируется целиком, но перед экспортом я делаю две копии оригинальной анимации и переименовываю их, например, в: walk_legs и walk_torso — где первая анимация будет содержать только анимацию для ног, а вторая только анимацию для верхней части героя.

Вообще, Spine очень удобный для работы с анимацией, хоть вначале и кажется немного непривычным. Вначале мне было не удобно, что каждый вид трансформации имеет свой Timeline: для перемещения, вращения и скэйла. Но в итоге, привыкнув, это оказывается совершенно полезной штукой, позволяющей отменить определенный вид неудачной работы. Например, я сделал неплохие движения, а потом решил по экспериментировать со скейлом и результат получился плохой. В случае с Flash, если я заранее не позаботился о резервной копии слоя, то анимацию придется править ручками: отменять скэйл, править движения. В Spine же просто можно удалить ключевые кадры для отдельного вида трансформации. Кроме этого, такой подход позволяет более гибко настраивать анимацию. В общем, в моей ситуации подготовка копий анимаций занимает ровно две минуты. Но самое интересное еще впереди.

Теперь нужно написать небольшой контроллер, который будет уметь воспроизводить раздельные анимации синхронно и не очень. Вначале это казалось достаточно сложной задачей, но все оказалось очень просто.

Если вы обратили внимание, то на картинке выше одинаковые анимации для разных частей тела я разделил постфиксами: _torso и _legs. То есть, анимация одна, но части тела, для которых она подходит — отличаются. Далее идея заключается в том, что персонажа нужно создать два отдельных метода, позволяющих задавать анимацию для нижней и верхней частей тела.

public void SetLegsAnimation(string aAnimationName)
{
  if (_curLegsAnimation != aAnimationName)
  {
    string name = string.Format("{0}_{1}", aAnimationName, legsPostfix);
    _legsTracker = _skeleton.state.SetAnimation(0, name, true);
    _curLegsAnimation = aAnimationName;
  }
}

Если первый метод прост и понятен:

  • Генерируем реальное имя анимации, исходя из названия и постфикса для ног.
  • Воспроизводим анимацию и сохраняем указатель на трэкер анимации.
  • Сохраняем текущее имя анимации.

 

То второй метод должен иметь более интересный функционал:

public void SetTorsoAnimation(string aAnimationName, bool aLoop = true)
{
  if ((!_lockTorso && _curTorsoAnimation != aAnimationName) || !aLoop)
  {
    string name = string.Format("{0}_{1}", aAnimationName, torsoPostfix);
    _torsoTracker = _skeleton.state.SetAnimation(1, name, aLoop);
    _curTorsoAnimation = aAnimationName;

    if (aAnimationName == _curLegsAnimation)
      _torsoTracker.time = _legsTracker.time;

    if (!aLoop)
    {
      _lockTorso = true;
      _torsoTracker.Complete += OnCompleteTorsoAnimation;
    }
  }
}

Суть этого метода заключается в том, что если анимация для тела воспроизводится в не зацикленном виде, то значит мы должны заблокировать анимацию тела от других анимаций ровно до тех пор, пока она не закончится (выстрел, перезарядка или иное действие). Если же анимация для тела запускается в зацикленном виде — значит это точно такая же анимация, как для нижней части тела и они должны воспроизводиться синхронно (устанавливаем текущее время такое же, как и для ног). Далее есть еще один метод, который является событийным и возникает в том случае, когда зацикленная анимация заканчивает свое проигрывание.

private void OnCompleteTorsoAnimation(Spine.AnimationState aState, int aIndex, int aLoopCount)
{
  _lockTorso = false;
  SetTorsoAnimation(_curLegsAnimation);
  _torsoTracker.Complete -= OnCompleteTorsoAnimation;
}

Вот и вся хитрость. Далее, код воспроизведения обычных анимаций для перемещения и т.п. выглядит как-то так:

animation.SetLegsAnimation("walk");
animation.SetTorsoAnimation("walk");

А если вдруг понадобилось выполнить какое действие, например по стрелять, то:

animation.SetTorsoAnimation("shoot", false);

В итоге, вся прелесть в том, что с таким подходом интерполяция между анимациями работает корректно и глазу совершенно не за что зацепиться!

Конечно, это далеко еще не все трюки и уловки, которые довелось использовать. Впереди еще много интересного! Но в целом, уже сейчас понятно сколько времени и сил было с экономлено, благодаря Spine :)

Хочу выразить благодарность @agulev за участие и помощь в поиске и решении данной проблемы!

Планы на следующую неделю

Персонаж пережил очередную итерацию и получил новые возможности в виде стрельбы, а так же задел для новых анимаций-действий. Но я не буду спешить и переходить к новым видам анимаций, так как теперь самое время заняться спец-эффектами. Ведь совершенно не интересно смотреть на пули, пропадающие в стенах и объектах, не оставив и следа. Но для спецэффектов нужен иной вид анимации, более классический, а именно: рисованная покадровая анимация. Все это ради того, чтобы сохранить ламповость эффектов из предыдущих частей. Но при этом постараться сделать их как можно интереснее и выразительнее. Что же использовать для покадровой анимации:

  • ?спользовать Spine для покадровой анимации?
  • ?спользовать стандартный аниматор Unity?
  • ?скать стороннее решение или писать какое-то свое?

 

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

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

[4 Апреля]

Полезные ссылки

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

1. Как повернуть точку вокруг оси? Как посчитать угол между двумя точками? ? т.п.

Ответы на эти вопросы в виде кода на AS3 вы можете найти, посмотрев исходный код утилитарного класса AntMath.as из Anthill — все комментарии на русском!

2. Для каких движков кроме Unity3D можно использовать Spine?

Полный список поддерживаемых сред выполнения Spine можно посмотреть здесь, а так же скачать необходимые библиотеки и ознакомиться с документацией.

3. Базовая документация для Spine + Unity3D.

Еще вопросы? Пишите в комментариях!

 

У Unity своя математика векторов довольно мощная и продуманная, есть куча методов рассованых по всему unity которые позволяют посчитать нужные штуки с помощью вектров (в том числе различные столкновения и пересечения без коллайдеров). Vector2/Vector3 имеют статические методы для расчета углов, нормалей, расстояний, проекций, так что лучше искать сперва там.

Вообще вектора, синус и косинус это самый нужный раздел геометрии в геймдеве xD хорошо бы уметь представлять операции с ними без калькулятора.

WeslomPo
22 Апреля 2016
— 12:04
#

"Например, я сделал неплохие движения, а потом решил по экспериментировать со скейлом и результат получился плохой. В случае с Flash, если я заранее не позаботился о резервной копии слоя, то анимацию придется править ручками: отменять скэйл, править движения. "
Ну, во флеше тоже есть motion tween, где отдельные параметры объекта в своей линейке, с графиками, своими ease, ключевыми точками и т.п. Просто не так популярно как classic tween.

Dragosha
22 Апреля 2016
— 13:24
#

Я сейчас использую Animation, встроенный в Unity3D. Анимацию делаю сначала в ламповом Flash IDE и потом перевожу во юньку. Так быстрее получается, чем сразу в юнити анимировать.

TheRabbitFlash
22 Апреля 2016
— 14:48
#

урааааа,наконец-то!

dinoZ
22 Апреля 2016
— 15:51
#

Спасибо за очень интересную и подробную статью! Восхищаюсь тем, что вы делаете!

samana
22 Апреля 2016
— 18:36
#

судя по всему игра будет очень интересная

игрок
22 Апреля 2016
— 20:25
#

Длинный и интересный материал, впрочем как всегда :) Можно было бы и не писать этот комент, но надо выравнивать дисбаланс по колву комментариев к содержанию статьи.

Elmigo
22 Апреля 2016
— 20:38
#

Антон, я уже писал тебе об этом, исправь ты уже описание методов rotatePointDeg и rotateDeg, а то там то в градусах, то в радианах, запутаться можно =)

GreenFest
22 Апреля 2016
— 21:12
#

А за статью спасибо, интересная и красивая)

GreenFest
22 Апреля 2016
— 21:13
#

TheRabbitFlash, расскажи подробнее про процесс пожалуйста

.nodoxi
23 Апреля 2016
— 08:30
#

@WeslomPo,

> У Unity своя математика векторов довольно мощная и продуманная...

Все так. Но меня не раз спрашивали о подобных вещах в отрыве от движка/платформы. В моем классе-примере реализованы универсальные и понятные методы особенно для начинающих.

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

Ant.Karlov
23 Апреля 2016
— 11:04
#

@Dragosha,

> Ну, во флеше тоже есть motion tween, где отдельные параметры объекта в своей линейке, с графиками, своими ease, ключевыми точками и т.п.

Возможно. До использования продвинутых твинов и костной анимации во Flash я так и не добрался :)

Ant.Karlov
23 Апреля 2016
— 11:07
#

@TheRabbitFlash,

> Я сейчас использую Animation, встроенный в Unity3D.

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

Ant.Karlov
23 Апреля 2016
— 11:09
#

@Elmigo, спасибо! ^__^

Ant.Karlov
23 Апреля 2016
— 11:10
#

@GreenFest,

> Антон, я уже писал тебе об этом, исправь ты уже описание методов rotatePointDeg и rotateDeg, а то там то в градусах, то в радианах, запутаться можно

Ох! Я наверное уже исправил, просто все никак не залью в репозиторий последнюю сборку. Спасибо что напомнил!

Ant.Karlov
23 Апреля 2016
— 11:11
#

Антон, привет!
Напиши пожалуйста в следующих постах, как ты работаешь с освещением в Unity. Очень интересна эта тема.

Kostazz
23 Апреля 2016
— 11:31
#

а я статьи не читаю. ничего не понятно, да и глаза от чтения записей на мониторе устают.
я просто картинки разглядываю :)

игрок
23 Апреля 2016
— 12:44
#

Зыс ыс ми эген!

Здорово! Я ничего не понимаю, но всё равно интересно! Так ещё уметь надо! Заинтересовать человека ничего не понимающего... Только это конечно не потому что ты плохо объясняешь, Антон, а, скорее, потому что я ещё не достаточно втянулся во все это дело))) Жду не дождусь анимаций разрушения)

SQUASH
23 Апреля 2016
— 14:16
#

Не вижу смысла использовать для покадрово анимации спайн(собственно зачем?), ровно как и юнити аниматор(большой оверхед).
Можно, конечно, сделать скриптик который будет менять спрайт в спрайт рендерере по таймеру, но я в очередной раз советую посмотреть вот это видео (можно ускорено) это лучший материал по покадрово анимации и способ с управляемыми партиклами может для тебя подойти и дать прекрасный перформанс https://m.youtube.com/watch?v=mS_bu1OKrb0

AGulev
23 Апреля 2016
— 23:28
#

@AGulev

Не, я имел ввиду покадровая в Animation не в виде спрайтов, которые меняют UV текустуры, а работа с keyframes :)

TheRabbitFlash
24 Апреля 2016
— 00:21
#

Спасибо, за статью! Но мне кажется как то не до конца корректно написано про ключевые кадры в Spine и во Flash, потому что Flash тоже посути хранит состояние объектов в ключевых кадрах и программно просчитывает что с объектом происходит между этих ключевых кадров, если между ними есть Tween. В случае же с обычной покадровой, то конечно там интерполяции не происходит.

RemyDeveloper
24 Апреля 2016
— 00:27
#

@RemyDeveloper
Flash все твины считает на этапе компиляции в swf. В swf они хрянятся как отдельные кадры. Твины существуют только в исходниках fla. Во всяком случае это точно относится к shape tween и classic tween, не уверен на счёт "нового" motion tween.

Denis
25 Апреля 2016
— 04:42
#

Геймплей сильно изменится из-за того, что стрельба теперь будет не "куда указывает мышь", а "куда направлена пушка"?
Такие изменения геймплея входили в планы? Как это отразится на action-составляющей механики?

Lampogolovii
25 Апреля 2016
— 08:53
#

@RemyDeveloper и @Denis, про ключевые кадры я намеренно написал теорию в отрыве от инструментов и платформ чтобы далее по тексту было понятно что такое "перекрытие/подмена ключевых кадров" другой анимацией. Ориентировался на неподготовленных читателей которые не просто разглядывают картинки :)

Ant.Karlov
25 Апреля 2016
— 11:39
#

@AGulev,

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

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

Ant.Karlov
25 Апреля 2016
— 11:40
#

@SQUASH,

> Жду не дождусь анимаций разрушения)

А вот анимаций разрушения как раз не будет (возможно только эффекты). Все разрушения будут построены на физике как и в оригинальных играх.

Спасибо! :)

Ant.Karlov
25 Апреля 2016
— 11:42
#

@Lampogolovii,

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

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

Но я думаю о том, что искусственная погрешность будет добавлена позже и она будет зависеть уже от характеристик героя и от состояния оружия, если таковые будут введены в игру :)

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

Ant.Karlov
25 Апреля 2016
— 11:49
#

Меня очень волнует вопрос - Какое будет имя главного персонажа?

Даниил Новаков
25 Апреля 2016
— 16:09
#

@Даниил Новаков, сейчас в сценарии герой скрывается под именем Блэйз (Blaze).

Ant.Karlov
26 Апреля 2016
— 11:06
#

а он с Земли?

игрок
26 Апреля 2016
— 13:05
#

Эмм... но Блэйз это же женское имя! У современных консольных игроков ассоциируется в первую очередь с Blaze the cat, а у ретрогеймеров - с Blaze из Streets of Rage.

Vik
26 Апреля 2016
— 16:01
#

@Denis
Flash все твины считает на этапе компиляции в swf.

Флеш хранит все ключевые кадры в виде набора свойств (углы, координаты, размеры и т.д.) чтоб потом этим работать программно. Анимация таймлайна во флеше точно такая же программная, как и в Unity3D.

Смотри пакет fl.motion.

Это, собственно, и есть полуаналог Animator из Unity3D. То, что с ним никто не умеет работать - заслуга адоби

TheRabbitFlash
26 Апреля 2016
— 18:56
#

@TheRabbitFlash

Я писал только о классических твинах и шейп твинах. Они появились задолго до AS3, как минимум в Flash 5, а может и раньше. Более ранние версии я просто не застал. fl.motion используется же только для Motion Tween. Я не прав?

Denis
27 Апреля 2016
— 05:05
#

Весь морфинг DisplayObject в Runtime выполняется через пакет fl.motion. С его помощью ты можешь наваливать любой пресет анимации в виде XML на любой объект. Я же говорю - всё у флеша есть из коробки как надо и как в юнити (по части программной анимации).

То, что об этом мало кто знает - очередное доказательство рукожопности адоби. Пакет появился начиная с Flash CS3 (2007 год).

А это одна из причин, почему мне сейчас начинает активно нравится юнити.

TheRabbitFlash
27 Апреля 2016
— 10:43
#

Лол,Блейз

anon man
28 Апреля 2016
— 00:47
#

Что ж, ждём появления экзоскелетов и прочего транспорта!

Кто-то-там
28 Апреля 2016
— 15:19
#

Блин, это суперкруто, мне так нравились первые 3 игры, а тут ещё и 4:3
очень надеюсь то что игра выйдет, жду с нетерпением
**спасибо что ты есть<3

Jirdoz
30 Апреля 2016
— 00:22
#

Антон а можешь добавить в игру противогаз и газовую гранату?

P.s.и добавь пожалуйста как я тебе говорил того мозгоеда:)

фанат
1 Мая 2016
— 11:02
#

когда дата выпуска?

Chase
1 Мая 2016
— 23:46
#

Антон похоже очень занят.... :)

игрок
2 Мая 2016
— 16:48
#

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

Фима Крокодил
4 Мая 2016
— 09:18
#

@Jirdoz, ?гра обязательно выйдет! Правда дата релиза пока не известна так как не зависит от меня. Впереди еще много различных и не простых этапов разработки которые не позволяют точно запланировать дату релиза. Спасибо за отзыв!

Ant.Karlov
6 Мая 2016
— 10:43
#

@фанат,

> Антон а можешь добавить в игру противогаз и газовую гранату?

Могу ;)

> P.s.и добавь пожалуйста как я тебе говорил того мозгоеда:)

Да, вроде договорились же, что мозгоед будет! :)

Ant.Karlov
6 Мая 2016
— 10:45
#

@Chase,

> когда дата выпуска?

Дата выпуска пока не известна. Разработка игры началась недавно и впереди еще много различной работы, поэтому сейчас нет возможности точно запланировать дату релиза.

Ant.Karlov
6 Мая 2016
— 10:46
#

@Фима Крокодил,

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

Пока никак не планирую решать этот вопрос. Судя по прошлому опыту использования такого подхода, а так же судя по другим играм — это не является большой проблемой, так как на это мало кто обращает внимание :) Но, если этот момент, вдруг окажется критичным (возможно появятся какие-то объекты которые будут сильно обращать внимание на эту проблему), тогда буду что-нибудь придумывать уже :)

Ant.Karlov
6 Мая 2016
— 10:49
#

ОМГ. TheRabbitFlash юзает юнити?

x10der
6 Мая 2016
— 15:56
#

Здесь могут забанить?

anonim234
7 Мая 2016
— 02:51
#

спс. Антон

фанат
7 Мая 2016
— 14:21
#

драсте я немного подучить русский язык приходить на мой сайт прошу! ? игра замбатрон очень клево если бы я могу поставить like я бы посавил и еще мажна пажулуста я перенесу зомботрон на свой сайт BigDino??

BigDino
24 Мая 2016
— 18:29
#