Как сделать меч в unity 2d

Добавил пользователь Алексей Ф.
Обновлено: 04.09.2024

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

Но чтобы увеличивался урон. Это было бы прикольной фишкой.

СПАСИБО ЗА ЭТОТ ШЕДЕВР! ЖДУ ПРОДОЛЖЕНИЯ.

Лучший,после твоего видео решила начать пробовать, завтра по твоим туторам буду что то пробовать )Спасибо

Бро я отвечаю что через месяца 2 тебя уже будет как минимум 5000 подписчиков, снимаешь годноту
Я вот тоже программирование хочу изучать и нашол тебя, топ

Круто! Вот бы ещё на двоих и сетевой режим рассмотреть на твоих примерах! Спасибо за труд! Нижайший поклон)

Редко встретишь годный канал с годным контентом. Очень интересно

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

@tikakalia можешь без перевода кинуть и показать таймкод где он это делает в видео.

а еще у меня враг не двигается почему то после создания анимаций или коллайдера

UnityEngine.Animator: SetTrigger (строка)

Враг: OnTriggerStay2D (Collider2D) (в Assets / scripts / Enemy.cs: 62)
как это решить

@Dechi газ с скриптом на OnTriggerEnter

@maxter здарова, а как сделать в 3д чтобы типо "газ" наносил урон игроку?

Привет! Ты классный! Я поиграл твою игру Starland, и был очень удивлён, как ты это делаешь??
Кстати, идея есть. Надеюсь поможешь, я делаю 3д шутер для андроид, ходьба будет на джойстике, и я не умею это делать, надеюсь ты скоро сделаешь про это видео)) Удачи.

@maxter спасибо, удачи тебе!

Спасибо! По 3D не особо шарю, но управление на андроид джойстиком многие просили, сделаю как-нибудь)

Я поражаюсь насколько качественно и понятно это всё сделано,спасибо Макс тебе огромное) удачи)

Для тех у кого переменная Player player; не создается, вы должны указать класс название скрипта который написан для игрока, например у меня вместо private Player player; написан private Movement_Charachter player;

2:30 тайм код для себя, что бы не забыть где код для смены оружия)))
по-моему это лучший канал по unity

Привет, видео топ, но хотелось-бы уроки по рисованию такой графики прикольной)

Так он это в Фотошопе рисует

Assets\Scripts\Enemy.cs(16,13): error CS0246: The type or namespace name 'Player' could not be found (are you missing a using directive or an assembly reference?)

скрипт выдает ошибку

У тебя на 16;13 строке имя плеер лишнее либо же ты менял название на другое если не получится, то это уже в 16;13 проверь всё ли знаки

Какой высокий уровень контента, лайк

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

@Андрей Санников конкретизации тоже желательно

@Karlik Nos немного внимательности и вуаля)

Блин, чувак, респект. Пол дня долбался и искал где накосячил и почему у меня не работает, а оно вон чё!

Братан видио супер даже первое, голос приятный и обучалки клас,можешь правда теперь под андроид сделать, кнопки для стрельбы упровлинее тоже и все в том роде. Заранее спасибо

Сделай управление под андроид чтобы атака была от кнопки.

Почему то выдаёт ошибку: Assets/Enemy.cs(16,13): error CS0246: The type or namespace name 'Player' could not be found (are you missing a using directive or an assembly reference?)

Го следующий можно сделать так чтобы враги могли некоторые стрелять и побольше оружия и разнообразия и баффы канечно же

Тоооооп спасибо жду следушюю часть

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

как решил, скажи пожалуйста!!

Если не сложно можешь показать как сделать жизни и получение урона? Как у тебя тут над персонажем.
А то я не понимаю не как.
Я могу сделать тока полоску жизней которая уменьшается к центру. А чтоб жизни были в виде сердец не как не получается(
За видио ролики тебе огромное спасибо

Че так лайков мало то? У тебя все на высоте

Можешь записать видео как сделать также только для телефона. Нажимаешь на кнопку и перс атакует.

Следующее видео: как сделать баффы

@Ru1E [Я Ксер] Мы одинаково мыслим.

А потом создадим всю террарию

Отличное видео, впрочем, как и всегда. Очень нравятся твои видео, продолжай в том же духе.

А как оптимизировать игру под разные разрешения экрана?

Из-за радиуса атаки,игрок умирает когда меч до него просто докасается(без анимации) что делать?

error CS0246: The type or namespace name 'Enemy' could not be found (are you missing a using directive or an assembly reference?) помоги решить ошибку плиз.

у тебя походу враг в файлах по-другому назван

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

Насколько я понимаю, в этих строчках мы бьём врага Enemy(в моём случае Skull), но как сделать чтобы этот же урон проходил по нескольким врагам? Допустим, поменяем мы Enemy на Skull, у нас всё работает, но если добавить такую же строчку, чтобы наносить damage ОДНОВРЕМЕННО Skull и Enemy - то урон наносится только первому. Как сделать чтобы можно было дамажить N количество соперников, а не одного?

Collider2D[] enemies = Physics2D.OverlapCircleAll(attackPos.position, attackRange, enemy);

for (int i = 0; i Рік тому

Ты научил меня делать скрипты!

Триггер attack так себе решение, попробуй сделать анимацию atack длительностью секунду или больше и увидишь как анимация будет сбрасываться!

Ты каждый кадр применяешь isRunning=false если игрок не двигается - по умолчанию, игнорируя все другие состояния.

Можно конечно на выходе из tackeOf включить Has Exit Time - но это костыль, по идее если анимаций больше чем две - нужна машина состояний, а не эта дичь.

что такое машина состояний?

У всех , когда отходишь от Enemy все-равно продолжает идти урон

@KonuS Странно, попробуйте добавить OnTriggerExit2D;

хай, у меня та же проблема, как решить?

Привет, делал атаку по твоему видео, как сделать чтобы клоны deathEffect удалялись после окончания партикла

если прям лень скрипт писать то добавь прифабу эфекта скрипт [Bullet] и укажи лайв тайм всё астольное оставь 0

в их настройках . подробнее в его видео про частицы ._.

Расскажи про ECS паттерн или про Data-oriented design подход. Если знаешь что то.

Привет Maxter, можно код атаки?

а что за анимация "enemy" у врага? я запутался

да точно такая же проблема. ты решил?

Можешь пожалуйста показать как делать "кат-сцены", когда нажимаешь на обьект.

да я знаю что пишу это 3 раз

но я не отстану

му ха ха ха *злобный смех*

@maxter спойлер: это и есть кат-сцена

ахах) Сам не знал как их делать и у себя в игре для этого просто включал обычную анимацию, отключив на время этой анимации весь интерфейс и контроллер игрока

1:38 что за анимация enemy, когда ее создали?

Знатоки, подскажите чайнику, а как сделать смену оружия по кнопке?

А как сделать так что пр ударе он останавливаетчя но и в жто время он не может атаковать и анимация останавливается и потом снова все возобновляется,можно сказать типа фриза.

Макс . Есть крутая вещь которая популярна но не разобрана. Сделай неуязвимость после получения урона, нигде это не описано, а запросов куча . Плиз, реально проблема с этим

А как ты сделал чтобы пуля разворачивалась и летела как влево так и вправо?

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

Ура новое видео

Сделай переход на телефон джойстик и кномки

Assets\Sprites\Minotaour\Minotaour1\Attacking.cs(28,41): error CS0246: The type or namespace name 'Enemy' could not be found (are you missing a using directive or an assembly reference?)
На строчке enemies[i].GetComponent().TakeDamge(damage);
Что делать?

@Meridian Привет, можешь скинуть свой скрипт врага ?

Имя "deathEffex" не существует в данном контексте

Что делать? Помоги пожалуйста

Не deathEffex а deathEffect, 100% заработает

Или ты когда создавал deathEffex неправильно написал

привет, делал по твоему видео, и увидел что ты используешь пространство имен "Player". решил смириться и вот он мне выдает ошибку мол у ваших деректив нет пространства имен "Player". никакие дерективы и других библиотек я не устанавливал, версия юнити 2019.4.2f1, это из - за версии? подскажи пожалуйста, заранее спасибо!

"Player" вроде это название скрипта который управляет твоим игроком

обновил визуал студио до последней версии. не помогло.

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

обновил до последней, не помогло!

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

У коллайдеров врагов включить галочку Is Trigger

Parameter 'attack' does not exist.
UnityEngine.Animator:SetTrigger (string)
что делать?

В скрипте написан свой триггер "attack" тебе надо либо в скрипте изменить этот "attack" на своё название, либо свой триггер в аниматоре переименовать на "attack"

посмотри как называется у тебя игрок и поменяй в скрипте

Что не так с кодом? using System.Collections;

public class PlayerAttack : MonoBehaviour

private float timeBtwAttack;

public float startTimeBtwAttack;

public Transform attackPos;

public LayerMask enemy;

public float attackRange;

public int damage;

public Animator anim;

private void Update()

@3eYTun - Зэйтун anim.SetTrigger("имя"); не поставил

Assets\Scripts\PlayerAtack.cs(22,44): error CS1002: ; expected пишет в консоли

Люди!! А есть видео Как сделать стреляющего врага?
Искала-искала, но нашла только видео Как сделать стреляющего главного героя :(

Тоже ищу и не могу ничего толкового найти.

Помогите у меня почемуто враг ненаносить урон, нету анимации.
Скрипт врага:
using System.Collections;

public class Enemy : MonoBehaviour

private float timeBtwAttack;

public float startTimeBtwAttack;

public int health;

public float speed;

public GameObject deathEffect;

public int damage;

private float stopTime;

public float startStopTime;

public float normalSpeed;

private Player player;

private Animator anim;

private void Start()

private void Update()

Враг атакует, но перестал двигаться. Что делать?

ПОМОГИ! Мне надо сделать так что бы враг наносил руками а не мечом урон

Сделай меч невидимым, т.е. пустой спрайт в пару пикселей, где кулак.

Привет, а как сделать give в юньке. Можно сердечко?

Проблема,OnTriggerStay что когда игрок уходит enemy продолжает атаковать и доставать

@Pav Pav cпасибо тебе большое )

@SanchoMarino
private bool _isPlayerNear; // находится ли игрок рядом
.
private void Start()

_isPlayerNear = false; // изначально будем считать, что игрок не рядом

>
.
public void OnTriggerStay2D(Collider2D other)//атака игрока

@Svizda Можешь скинуть скрипт именно для этой игры в видео пожалуйста?? А то у меня не получается это воткнуть в сой скрипт, новичок ещё

Вообще в принципе через OnTrigger не очень правильно давать урон. Он как то иногда криво работает. Лучше создать переменную флоат, которая будет показывать дистанцию до игрока. И когда игрок попадает в эту дистанцию, то через время которое можно самому задать он атакует. Вот пример скрипта на противника:

public float startTimeBtwAttack;
private float timeBtwAttack;

public int damage;

public float stoppingDistance;
private Transform player;

private void Start()
player = GameObject.FindGameObjectWithTag("Player").transform;
timeBtwAttack = startTimeBtwAttack;
>

private void Update()
if(Vector2.Distance(transform.position, player.position) > stoppingDistance)
timeBtwAttack = startTimeBtwAttack;
>

привет Maxter
можешь помочь в общём у меня почему то пюльку летят вверх хотя оружие и пульку смотрят в одну сторонну что делать

В скрипте Bullet найди .up и смотря куда твоя картинка смотрит (left, right , down, up) это и пропиши , да поздно и что , помог же

Данная серия уроков предназначена для тех, кто хочет научиться создавать своё собственное оружие для видеоигр, будь то AAA First Person Shooter(FPS), Survival Game или Third Person Shooter(TPS). Моделирование оружия - очень простое дело, но занимает уйму времени, так как первоначально мы должны создать High-Poly модель, после этого мы должны сделать ретопологию, тем самым оптимизировав модель для игр, запечь Normal Map с High-Poly, наложить качественные Physically Based Rendering (PBR) текстуры и сделать риггинг 3D модели для последующей анимации. Серия уроков будет разбита на 3 части: 1. Моделирование пистолета, 2. Создание материалов и анимаций для Glock, 3. Импорт модели в Unity3D и создание скрипта стрельбы.

Уроки Unity 5 - создание Game-Ready оружия

Unity 5 уроки - создание FPS оружия для Unity3d

Чтобы создать Game-Ready Glock, нам нужно придерживаться данного плана:
1. Найти чертежи и несколько референсов пистолета
2. Приступить к моделированию High-Poly
3. Оптимизировать 3D модель для игр
4. Создать PBR текстуры
5. Импортировать Glock в Unity

Чертеж пистолета, Glock Blueprint

Чертежи пистолета Glock

Для создания большинства моделей необходимы чертежи. Мы нашли неплохое изображение пистолета Glock 19 спереди, сзади и по бокам. Фотографии не совсем совпадают, но такие погрешности не должны помешать процессу. Но все-таки лучше использовать точные чертежи, например с этого или этого сайта. Итак, чтобы добавить изображение на задний фон, нужно: нажать клавишу N, в открывшемся меню найти вкладку Background Images > Add Image и выбрать нужный файл. Чтобы увидеть изображение, нужно перейти в ортогональный режим, нажав 5 на Numpad. Снизу есть важная характеристика - Opacity (Прозрачность). Добавьте ещё несколько референсов таким же способом, но временно отключив их в этой вкладке. Если вам этот метод не нравится, то можно включить аддон Images As Planes в User Preferences > Add-ons.

Уроки Unity 5

Чертежи не могут показать порезы или мелкие части на пистолете. Здесь нам помогут референсы из Google. Поищите как можно больше фотографий Glock с различных сторон.

Уроки Unity3d, видео уроки unity

Моделирование High-Poly оружия

При создании High-Poly модели нет необходимости экономить полигоны, используйте столько, сколько считаете нужным. Не жалейте полигонов на всеразличные мелкие детали и порезы. Для удобства вы можете использовать Hotkeys (горячие клавиши), которые сильно упростят вам жизнь и сэкономят уйму времени. Все полезные горячие клавиши Blender написаны в этой статье: Горячие клавиши Blender3D. Нам же понадобятся только некоторые из них: E - экструдирование, G - перемещение, S - масштабирование, Ctrl+B - фаска, Z - переход в режим Wireframe, X - удаление, A - выделение всех элементов, если нажать A в режиме редактирования, то выделятся все точки/ребра/плоскости, H - скрыть объект.

Уроки Unity, создание оружия Unity

Создание стрельбы Unity, уроки Unity 5

Unity5 уроки, unity уроки

Unity 5 уроки - создание стрельбы, Devgam

Ретопология High-Poly Glock

На данном этапе нам нужно оптимизировать нашу 3D модель для видеоигр. AAA оружие сейчас должно иметь до 20.000 Tris, если это автомат, до 10.000 Tris, если это пистолет. Это приблизительные значения, для каждого проекта они разные. BlenderMania выпустили очень неплохой урок о том, как сделать ретопологию высокополигонального объекта на Low-Poly 3D модель.

В данном уроке автор рассказывает о том, как использовать Blender3D и MeshLab для создания быстрой ретопологии, используя минимум усилий и времени. В нашем случае нет необходимости использовать MeshLab, мы создадим Low-Poly модель с нуля, как показано в этом видеоуроке:

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

Unity 5 оружие

Создайте UV-развертку низкополигональной модели. Для запекания Normal Map нужно выбрать нашу High-Poly модель, потом выбрать нашу Low-Poly, перейти во вкладку Render. Нужно убедиться, что у нас выбран Blender Render. Находим в этой вкладке Bake> Bake Mode = Normals, Normal Space = Tangent, Selected to Active. Жмем Bake. После запекания карты нормалей нужно сохранить, нажав F3. Перейдите во вкладку Materials, создайте новый материал, во вкладке Textures выберите нашу карту нормалей, в Influence отключите Color, Geometry > Normal. В Mapping Coordinates должны быть переключены с Generated на UV. Добавьте свет на сцену и посмотрите результат.

Unity 5 пистолет, Glock, моделирование, рендер, создание стрельбы, создание шутера, Unity3d, Unity 5

В следующем уроке мы создадим текстуры и анимации для нашего пистолета.

Редакция Devgam

Благодарим наших читателей и подписчиков за проявленный интерес. Поделитесь постом в социальных сетях.

Кирилл Васильев


Кирилл Васильев ответил Альберту

Альберт Зиганшин

Кирилл Васильев


Кирилл Васильев ответил Альберту

Альберт, мне нужно, чтобы по свайпу в месте этого свайпа появлялся меч и резал либо противника либо пустое пространство. Я ожидал ответ, который бы приблизил меня к реализации этой механики. Не обязательно писать за меня код. Мне хватит примерного алгоритма.

Альберт Зиганшин

Кирилл, сам видишь как твой последний вопрос отличается от первоначального?)

Свайпы ты уже умеешь делать?

Кирилл Васильев


Кирилл Васильев ответил Альберту

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

Артем Меринов

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

Кирилл Васильев


Кирилл Васильев ответил Артему

Кирилл Васильев


Кирилл Васильев ответил Артему

Артем, пока все что происходит: меч улетает в невероятное приключение о котором никому ничего неизвестно

Артем Меринов

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

Максим Полетавкин


Максим Полетавкин ответил Кириллу

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

? Создаем 2D-игру на Unity: инструкция для новичка

Недавно мы рассказали о том, как научиться разработке игр на Unity . Продолжим тему на практике и покажем, как новичку создать на этой платформе первую 2D-игру.

Если вы хотите получить более систематическое образование в области разработки игр, мы рекомендуем рассмотреть факультет разработки игр онлайн-университета GeekBrains.

Двумерные игры сравнительно просты: для них не требуется сложных 3D-моделей, программный код по сравнению с 3D-проектами выглядит понятнее. Такие игры популярны как на десктопах, так и на мобильных устройствах. Unity также позволяет разрабатывать игры и для браузеров.

За последние годы вышло много популярных двумерных игр:

Программная реализация 2D-игр проще не только из-за отсутствия третьего измерения: на самой сцене меньше объектов, вместо трехмерных моделей плоские спрайты, вместо скелетной анимации – покадровая. А еще 2D-игры проще портировать на другие платформы – легче найти новую аудиторию.

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

Предварительно рассмотрим основные понятия Unity, без понимания которых будет проблематично создать игру:

Предполагаем, что вы уже установили редактор и создали аккаунт на портале Unity.

В первую очередь создадим новый проект и откроем его настройки (Edit -> Project Settings). Во вкладке Editor установим параметр Default Behaviour Mode в значение 2D

Настройка проекта Детальная настройка проекта

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

1. Создаем пустой объект, переименовываем в GameManager.

Создаем пустой объект

Создаем пустой объект

3. Создаем квадратный спрайт, называем его Pad (Assets -> Create -> Sprites -> Square). Аналогично создаем круглый спрайт Ball (Assets -> Create -> Sprites -> Circle). Масштабируем спрайт Pad со следующими параметрами – x:0.5, y:2.5, z:1.

Создаем спрайты

Создаем спрайты

4. Создаем префабы для Pad и Ball, после чего добавляем к ним компонент Box Collider 2D (включаем параметр Is Trigger) и компонент Rigidbody 2D (выставляем параметр Body Type в значение Kinematic).

Добавляем .компонент Box Collider 2D Настраиваем.компонент Box Collider 2D Добавляем компонент Rigidbody 2D Масштабируем спрайты

6. Заполняем скрипты следующим кодом.

GameManager.cs Ball.cs Pad.cs

6. Добавляем к префабу Ball и Pad теги с аналогичными именами. Выделив префабы, в инспекторе мы можем видеть выпадающий список тегов. Там же расположены и кнопки для добавления и редактирования тегов.

7. В настройках камеры выставляем параметр Projection в значение Orthographic, а параметр Clear Flag – в значение Solid Color.

Настройка камеры

Настройка камеры

8. Настраиваем кнопки, как показано на следующих скриншотах (Edit -> Project Settings -> Input Manager).

Настройка ввода, основное Настройка ввода, первый игрок Настройка ввода, второй игрок

Вот и всё, игра готова!

Пинг-понг, итоговый результат

Пинг-понг, итоговый результат

Билд для платформы Windows

1. Официальный туториал от Unity, где детально рассмотрен процесс создания roguelike RPG.

2. Youtube-канал Brackeys , где можно найти серию видеоуроков по созданию 2D-платформера.

3. Youtube-канал N3K EN содержит множество уроков как по отдельным компонентам Unity, так и полноценные серии уроков по созданию игр с нуля.

Если у вас мало опыта в разработке игр на Unity, мы рекомендуем обратить внимание на факультет разработки игр GeekBrains . Материал хорошо структурирован и содержит все необходимое для того, чтобы стать профессиональным Unity-разработчиком.

В числе прочего вы разработаете 2D-платформер с физическими загадками и динамическим освещением, научитесь портировать его на мобильные устройства. Кроме того, разработаете полноценную браузерную стратегию, а также игру в жанре двухмерных гонок.

По окончании обучения вы будете иметь портфолио из 4 игр, которое можно показать на собеседовании. Если же какая-то часть материала будет непонятна, вы всегда можете обратиться к персональному преподавателю.

Павел Попов — Senior Unity Developer в команде NIX. В течение восьми лет он взаимодействует с архитектурой проектов и сетевой составляющей, а также периодически делает инди-игры. Знаком со стеком разработки с нуля, включая наброски картинок. Для ArtCraft Media Павел написал подробный туториал о том, как создать и анимировать 2D персонажа с помощью Unity 2020 LTS и пакетов PackageManager.

Павел Попов — Senior Unity Developer

Почему Unity?

Выбор пал на эту технологию потому, что в ней у меня больше опыта. Средства Unreal Engine, например, лучше всего использовать в 3D-разработке. Godot вполне в силах потягаться с Unity, но там еще есть нюансы с производительностью и стабильностью. Adobe Animate или Toon Boom Animation — для тех, кто рисует покадрово, например, для художников и профессиональных аниматоров.

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

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

Сейчас мы создадим готового к анимации персонажа средствами Unity из картинки, разбитой на части. Освоив описанные ниже инструменты, ты сможешь оживить любую картинку, привести в нужный вид персонажа и также оживить его. Кроме того, в будущем ты будешь гораздо точнее ставить задачи художникам. Итак, погнали!

Начальная настройка Unity

Поставив 2D PSD Importer, за ним подтянется 2D Animation, который нам понадобится для инверсной кинематики (далее IK). Далее все, что нам нужно — правильно настроенный арт, и здесь есть свои тонкости. Возьмем для наглядности программу Gimp (последующие действия идентичны для Photoshop).


Используемые пакеты (Окно PackageManager (Windows->PackageManager). Источник: личный архив автора

Разбиваем персонажа на слои в Gimp (или Photoshop)

Персонаж, разобранный по слоям в Gimp. Источник: личный архив автора

Персонаж, разобранный по слоям в Gimp. Источник: личный архив автора

Если используешь Photoshop, выбери при экспорте формат .psb. Если Gimp, то экспортируем .psd, и потом вручную меняем формат файла на psb в проводнике. Они отличаются большим объемом поддерживаемого разрешение вплоть до 300 000 x 300 000 в отличии от обычного .psd (30 000 x 30 000). Если кидать обычный формат (.psd), Unity его не увидит. Перейдем к самому интересному инструменту с пакета PSD Importer.

Настройка персонажа в Unity

Благодаря PSD Importer пакету мы видим дополнительные возможности — Secondary Textures. Они нужны, чтобы наложить дополнительные карты нормалей или высот, и сделать нашу картинку объемнее.

 Выбираем нашего персонажа (Окно SpriteEdtior по клику на на файл персонажа.psb, youtubeIntro). Источник: личный архив автора

Выбираем нашего персонажа (Окно SpriteEdtior по клику на на файл персонажа.psb, youtubeIntro). Источник: личный архив автора

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

Результат — свет знает, как осветить sprite. Высоты и углубления знаем благодаря NormalMap. Источник: личный архив автора
Результат — свет знает, как осветить sprite. Высоты и углубления знаем благодаря NormalMap. Источник: личный архив автора

Результат — свет знает, как осветить sprite. Высоты и углубления знаем благодаря NormalMap. Источник: личный архив автора

Идем дальше: проверяем, распознались ли все элементы в главном окне корректно, и можем переименовать или изменить pivot по необходимости. Теперь нас интересует Skinning Editor.

Окно Skinning Editor. Источник: личный архив автора

Окно Skinning Editor. Источник: личный архив автора

Полезные ссылки о PSD Importer о SkiningEditor. Рекомендую ознакомиться с примерами, если есть желание создать что то отличное от нашего персонажа, и чтобы понять разные стороны инструмента.

Оранжевым цветом на скриншоте подсвечено, какую панель стоит включить. С ее помощью мы правильно выложим наши кости, и она работает как стандартная иерархия объектов в Unity (Hierarchy — главная панель, переставления родительских объектов в дочерние, — прим. авт.).

Советую сразу именовать новосозданную кость в панели Visibility -> Bone (на скриншоте ниже выделено оранжевым).

Финальный результат настройки костей. Источник: личный архив автора

Финальный результат настройки костей. Источник: личный архив автора

Нажимаем AutoGeometry для построения геометрии под каждый спрайт. Это позволяет в тонкой настройке задать нужный Mesh Deformation. Убрав выделение с какого-либо спрайта, жмем AutoWeight.

Маловероятно, что тулза на 100% распознала все верно. Перейдем в детальные настройки. Первое, что нас интересует — какой спрайт и область привязалась к кости. Для этого открываем Bone Influence.

Bone Influence — настройка привязки костей к изображению и его областям. Источник: личный архив автора

Bone Influence — настройка привязки костей к изображению и его областям. Источник: личный архив автора

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

Примечание: есть более продвинутый режим — это, например, когда надо сделать, чтобы плащ был анимирован. Для этого вручную настроена сетка (вкладка Edit Geometry), и заданы несколько костей с областями с помощью инструмента Weight Brush. Но для первичного разбора нам достаточно правильно задать привязки костей к картинкам.

Когда мы уберем лишние кости, увидим, что вся область подсвечивается цветом этой кости. Если что-то не так, перегенерируйте Weight (AutoWeights -> Generate).

Финальный результат настройки. Источник: личный архив автора

Финальный результат настройки. Источник: личный архив автора

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

Примечание: Рекомендую для ног и рук сделать три кости, или позже добавить их в режиме префаба. Так нам будет проще с помощью LimbSolver 2D (из пакета 2D Animation — компонент инверсной кинематики, — прим. авт.) настроить конечности. Не забываем нажать Apply, перекидываем наш префаб в Unity:

Настроенный персонаж исходное состояние. Источник: личный архив автора

Настроенный персонаж исходное состояние. Источник: личный архив автора

Настройка персонажа для анимации с помощью инверсной кинематики

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

Создание родительского объекта для персонажа. Источник: личный архив автора

Создание родительского объекта для персонажа. Источник: личный архив автора

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

Исходный файл персонажа. Источник: личный архив автора

Исходный файл персонажа. Источник: личный архив автора

Далее добавляем четыре Limb Solver — это будут наши конечности. И один ССD, так как у нас между головой и туловищем всего две кости. Здесь мы можем настроить точнее. Если нет желания заморачиваться, можно просто создать пустой объект (в нашем случае — вместо меча), и сдвинуть его, или вовсе учесть в настройках костей шагом ранее.

Примечание: CCD и FABRIK отличаются точностью и количеством проходов по иерархии. Рекомендую ознакомиться с документацией подробнее.

Добавляем Limb Solver. Источник: личный архив автора

Добавляем Limb Solver. Источник: личный архив автора

Теперь именуем наши вновь созданные объекты, и создаем по одному простому GameObject под каждый. Желательно их тоже назвать, чтобы в дальнейшем не теряться. Устанавливаем Target в каждом созданном Solver — четыре Limb и один CCD.

Устанавливаем Target в дочерние объекты. Источник: личный архив автора

Устанавливаем Target в дочерние объекты. Источник: личный архив автора

Теперь устанавливаем Effector-точку для каждого IK Solver:

ArmL Solver Setup. Источник: личный архив автора
ArmL Solver Setup. Источник: личный архив автора
ArmL Solver Setup. Источник: личный архив автора

ArmL Solver Setup. Источник: личный архив автора

Мы можем задать длину воздействия на потомков (выделено зеленым на скриншоте) до плечей, или в нашем случае до Roota. Когда поднимем наши точки с пола, увидим, что пока не все так гладко.

Результат первичной настройки. Источник: личный архив автора

Результат первичной настройки. Источник: личный архив автора

Здесь мы видим две проблемы. Во-первых, наши суставы смотрят не в ту сторону. Во-вторых, наш управляющий point направляет руки персонажа не туда, куда надо.

Для начала поправим положение рук. Для этого переходим в конечную иерархию в Sword. Наведя курсор между X и значением, появляется альтернативный курсор — <>. Кликаем и понемногу меняем положения так, чтобы наш меч лег в руку. Ту же операцию проводим и для координаты Y при необходимости.

Настройка IK. Источник: личный архив автора

Настройка IK. Источник: личный архив автора

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

Проверка на смещение управляющих точек. Источник: личный архив автора

Проверка на смещение управляющих точек. Источник: личный архив автора

Переходим к суставам. Для этого кликаем на Flip-настройку. Этот инструмент вывернет сустав в нужную сторону. Здесь все зависит от первоначального скелета. В нашей ситуации имеем дело с ногами:

Настройка суставов. Источник: личный архив автора

Настройка суставов. Источник: личный архив автора

Мы получили настроенного персонажа, которым можем управлять с помощью пятью точек. Также нам доступен Root, который не привязан к инверсной кинематике. Сдвигая его, мы можем менять положения тела, а наши IK Solver оставят конечности в той же позиции.

Финальный результат настройки. Источник: личный архив автора

Финальный результат настройки. Источник: личный архив автора

В считанные секунды мы можем поставить нашего персонажа в нужное положение и быстро анимировать в среде Unity для игры или ролика.

В следующей части рассмотрим создание кат-сцены и то, как мы можем скомпозировать управление камерой, эффектами и уже настроенным персонажем в одном таймлайне с помощью Cinemachine Package.

Читайте также: