А кто-нибудь ещё страдает кастомизацией в пиксельарт проектах?
Я просто думаю, как анимировать огромное количество частей тела?!
Пока-что я просто нагромоздил «вермишель» из огромного полотна строк кода,
потому-что классический аниматор в юнити не очень пригоден для пиксельарт анимации.
Да и вдобавок это пригодится, когда дойду до анимации в GMS,
там скорее всего придётся кодом анимировать.
- 10 октября 2021, 08:00
- 02
Также тестировал на Tic-80 аниматор, хотя аниматор пугает лишь своей нечитабельностью и огромным
слоем "вермишели" кода) Интересно как кто анимирует множество частей тела?
https://tic80.com/play?cart=1859
Вот всего 2 вида анимации на Lua из этого Tic-80 эксперимента, и это выглядит уже адово, но я так и не придумал лучше метод:
Ну все эти разбитые на куски спрайты нужны для глубокой кастомизации, чтобы можно было любую часть тела поменять, хвост, одежду, лицо и прочее.
А в юнити это у меня выглядит тоже не очень, но уже поприятнее, хотя каша из кода та ещё:
Хотелось бы понять, может это я что-то не так делаю, а нормальные разработчики с кастомизацией другие идеи придумали, как анимировать множество кусков тела и чтобы всё работало хорошо с точки зрения целостности тела.
А сам классический аниматор не подходит, потому-что он не гибкий и не округляет положение объектов, чтобы пиксельарт не начал дёргаться, если позиция не будет округляться до целых чисел.
Декомпозиция тебе в помощь.
Создаём базовый класс Equipment (или Item), прописываем общие поля и методы (в твоё случае AnimAttack, AnimCharge...). Наследуем от него класс Cloak (тип экипировки), в котором переопределяет методы и прописываем всё для анимации данного типа (например, если для всех плащей у тебя только 4 кадра анимации). От типа создаём конкретный класс плаща (ну или просто экземпляр с уникальным индексом и параметрами).
Теперь к объекту персонажа (либо через дочерние объекты, либо массив, либо список уже базового класса Equipment) добавляем нашу экипировку.
При изменении состояния (анимации) персонажа проходим циклом по всему снаряжению и у каждого элемента вызываем необходимый метод.
Можно и состояние (attack, charge...) вынести как тип (или enum), и вообще сделать метод Animation(State).
Это грубо, конечно. Советую поискать в интернете аналогичные темы по организации экипировки. И если в Unity есть аниматоры, то аналоги можно поискать в движках (фреймворках), в которых пишут кодом (Love2D, например).
Интересный вариант.
И ещё, в любом случае, будешь ты анимировать кодом или через аниматор, то такой подход будет более гибкий. Ты просто будешь вызывать в нужном методе соответствующие функции аниматора.
Анимировать кодом!? Такое себе занятие.
смотря что анимировать на самом деле, я бывает делаю такое ну и еще от стилистики может зависеть
Ну кстати в годоте аниматор местами лучше, чем у юнити, в том плане что там можно настроить чёткие и резкие переключения угла, позиции и спрайтов. Но я не уверен как сделать в том же годоте анимацию плавающего спрайта, то есть чтобы анимация клетчатой рубашки легко менялась на кофту с совершенно другими кадрами спрайтов или любую другую шмотку и анимация бы не ломалась.
PS Ну это при том что я не планирую в годоте работать, просто спросил, а то я столько движков не вывезу изучать.
Можно менять текстуру или двигать атлас внутри текстуры
Ну по первому пункту - это не 3D объект.
А двигать атлас внутри текстуры тоже непонятно как в спрайте юнити,
но если бы это был обычный 3D объект с обычной текстурой было бы проще, но спрайты удобнее, чем создание объекта (в виде плоской плашки с 2 треугольниками) вручную и накладывания текстур, а потом ещё и думать как правильно размер менять этому объекту чтобы pixelperfect получился.
Я не знаю про Юнити, я написал рабочие варианты для Годота, но, наверное, в Юнити примерно так же. И это всё для 2D (стандартного, который со спрайтами).
Почему должна ломаться анимация? Подсовываешь ей нужный фрейм атласа с твоими одежками. Я хочу сказать, что анимация кодом - это топорно, нужно писать инструмент (плагин, расширение, модуль).
лучше делать одинаковое количество кадров и скорость одинаковую для элементов одного типа, типа для кофт там, шапок и тд