Привет, Хабр!
Все мы здесь любим качественные пошаговые руководства для начинающих, чего уж греха таить. По платформерам на Unity руководств много, а вот качественных не то что бы и очень. Сегодня мы попробуем добавить в копилку хороших уроков еще один. А создавать мы будем персонажа для 2D-платформера, ни больше, ни меньше.
Присоединяйтесь, учитесь, но помните: под катом очень много гифок.
Итак, с чего начать создание персонажа? Конечно же, с его спрайта. Достаточно перетащить картинку из любой папки на жестком диске во вкладку Assets, а оттуда — прямо на сцену. Оговорюсь сразу, в этом уроке мы не будем рассматривать создание анимации. А вот в следующих частях цикла — будем.
![](https://habrastorage.org/files/9c4/793/22e/9c479322e8214d6caba243495b6643ed.gif)
Как видите, после добавления на сцену (условимся, что это полноценный аналог словосочетанию scene view) у спрайта появились два компонента. Первый — transform. Он отвечает за расположение любого игрового объекта на сцене, его масштаб и текущий угол поворота относительно осей. Компонент sprite renderer как раз занимается отрисовкой спрайта нашего обаятельного носача в процессе редактирования и игры.
![](https://habrastorage.org/r/w1560/files/296/1f0/ad5/2961f0ad50d549529e1ceb9d2ce7fd6c.png)
Но пока персонаж всего лишь картинка, он не может взаимодействовать с окружающим его миром. Для этого на помощь приходят компоненты, спрятанные во вкладке physics2d. В нашем случае это box collider и circle collider. Первый мы добавим на верхнюю часть персонажа для столкновений со стенами и всем остальным, а второй расположим на уровне ног. Это позволит двигаться по наклонным поверхностям (и поверхностям с небольшим перепадом высот) без особых проблем.
![](https://habrastorage.org/files/1f3/280/c80/1f3280c80eb843cc9413dca072ef2a18.gif)
Теперь, чтобы на героя действовала, допустим, гравитация, добавим ему rigidbody2D (ну или твердое тело, как вам больше нравится). Для этого все в том же меню add component -> physics2D выберем пункт rigidbody2D и к спрайту сразу же добавится еще один компонент.
![](https://habrastorage.org/files/c0e/b76/479/c0eb764799ad4bda858c667ce521b7a8.gif)
Если вкратце:
mass отвечает понятно за что;
linear drag и angular drag — линейное и угловое сопротивление, соответственно;
gravity scale — коэффициент гравитации для конкретно этого объекта;
fixed angle отключает переворот персонажа при столкновении с чем-нибудь, допустим, летящим;
isKinematic фиксирует объект раз и навсегда в одной точке;
interpolate устанавливает режим сглаживания при отрисовке персонажа;
Для платформера стандартное значение гравитации (-9.81 по оси Y) не очень подходит, поэтому изменим его на какое-нибудь магическое число. Например, -30. Для этого зайдем в Edit — Project Settings — Physics2D и заменим нужное значение в инспекторе.
![](https://habrastorage.org/files/f62/a9c/cde/f62a9ccded6d40d990cb7673091142dd.gif)
На этом пока перестанем добавлять персонажу компоненты. Но сделаем кое-что из него. Для того, чтобы нам не приходилось тысячу раз добавлять одинаковые компоненты на каждом, допустим, уровне, в Unity есть механика под названием prefabs. Она позволяет создать из игрового объекта «болванку», которую можно использовать много раз и менять как своей душе угодно, не боясь за то, что какие-то экземпляры могут не измениться. Для создания префаба достаточно просто перетащить объект из иерарахии во вкладку assets. В моем случае еще и в папку prefabs.
![](https://habrastorage.org/files/42c/bc0/0f5/42cbc00f52c44803ac199838505a7c92.gif)
Как видите, оба экземпляра героя прекрасно создаются и существуют вместе. Теперь нужно создать платформу, на которой будет стоять наш большеносый друг. Перетащим спрайт на сцену и добавим ему polygon collider. Размеры этого коллайдера, к слову, можно менять, перетаскивая его вершины с зажатой кнопкой shift.
![](https://habrastorage.org/files/38e/1bb/6ce/38e1bb6ce7c04a9098d464142fd46348.gif)
Самое время научить персонажа двигаться. Перетащим заранее подготовленный скрипт (его нужно скачать и сохранить в папку assets) прямо на персонажа в hierarchy view.
![](https://habrastorage.org/files/e90/246/346/e902463464254cff99178154ca370a0f.gif)
![](https://habrastorage.org/r/w1560/files/c7a/cde/54c/c7acde54c1e544f08b35bdefb055352a.png)
У этого кусочка кода есть ряд параметров, которые отвечают за поведение героя в игре.
maxSpeed и JumpForce — максимальная скорость (по горизонтали) и сила прыжка. Экспериментально проверено, что для массы, равной единице, и гравитации -30 значения maxSpeed=10 и jumpForce = 700 являются оптимальными.
groundCheck — дочерний объект, находящийся в нижней точке спрайта и отвечающий за определение того, находится ли нечто, чем мы управляем, на «земле»
whatIsGround — что, собственно, считать землей. В нашем случае «землей» считается все, кроме персонажа
groundRadius — некая величина, в пределах которой проверяется столкновение с поверхностью.
В итоге, строчка grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); проверяет, пересекает ли groundCheck с радиусом groundRadius поверхность и, допустим, запрещает прыгать в нужных случаях.
![](https://habrastorage.org/files/e82/2a7/5ff/e822a75ff065418f89d9c6cdfc354462.gif)
Давайте, наконец, запустим игру и посмотрим что же у нас сегодня получилось. Для этого нажмем кнопку Play в верхн… Да ладно, вы и сами это разглядели :)
![](https://habrastorage.org/files/632/c95/1c2/632c951c2aba49f7b73e7bcff8dcebe4.gif)
Герой прекрасно двигается (хотя, возможно, и не совсем прекрасно), и это создает для нас отличные предпосылки продолжить создание платформера.
А в следующей части мы разберемся как управлять камерой, узнаем кому нужно зажигание звезд и создадим самого первого врага. И да, попутно исправим один критический баг, беспечно пропущенный в статью во время этого урока. Догадаетесь, какой?
Если эта статья вдруг пробудила в вас желание написать собственную игру, то не растрачивайте его впустую! Прямо сейчас проходит конкурс, стать участником которого слишком просто: достаточно зарегистрироваться, выложить свою игру в store и дождаться объявления результатов. А победителей ждут Xbox One и великолепные Lumia 930!
Пойду дописывать свой Angry Flappy Swompy 3 Deluxe. Stay tuned, вторая часть статьи в ближайшие дни!
p.s.
Платформа.png
Персонаж.png (огромное спасибо Анастасии Гарань за отрисовку героя)
Все мы здесь любим качественные пошаговые руководства для начинающих, чего уж греха таить. По платформерам на Unity руководств много, а вот качественных не то что бы и очень. Сегодня мы попробуем добавить в копилку хороших уроков еще один. А создавать мы будем персонажа для 2D-платформера, ни больше, ни меньше.
Присоединяйтесь, учитесь, но помните: под катом очень много гифок.
Итак, с чего начать создание персонажа? Конечно же, с его спрайта. Достаточно перетащить картинку из любой папки на жестком диске во вкладку Assets, а оттуда — прямо на сцену. Оговорюсь сразу, в этом уроке мы не будем рассматривать создание анимации. А вот в следующих частях цикла — будем.
![](https://habrastorage.org/files/9c4/793/22e/9c479322e8214d6caba243495b6643ed.gif)
Как видите, после добавления на сцену (условимся, что это полноценный аналог словосочетанию scene view) у спрайта появились два компонента. Первый — transform. Он отвечает за расположение любого игрового объекта на сцене, его масштаб и текущий угол поворота относительно осей. Компонент sprite renderer как раз занимается отрисовкой спрайта нашего обаятельного носача в процессе редактирования и игры.
![](https://habrastorage.org/files/296/1f0/ad5/2961f0ad50d549529e1ceb9d2ce7fd6c.png)
Но пока персонаж всего лишь картинка, он не может взаимодействовать с окружающим его миром. Для этого на помощь приходят компоненты, спрятанные во вкладке physics2d. В нашем случае это box collider и circle collider. Первый мы добавим на верхнюю часть персонажа для столкновений со стенами и всем остальным, а второй расположим на уровне ног. Это позволит двигаться по наклонным поверхностям (и поверхностям с небольшим перепадом высот) без особых проблем.
![](https://habrastorage.org/files/1f3/280/c80/1f3280c80eb843cc9413dca072ef2a18.gif)
Теперь, чтобы на героя действовала, допустим, гравитация, добавим ему rigidbody2D (ну или твердое тело, как вам больше нравится). Для этого все в том же меню add component -> physics2D выберем пункт rigidbody2D и к спрайту сразу же добавится еще один компонент.
![](https://habrastorage.org/files/c0e/b76/479/c0eb764799ad4bda858c667ce521b7a8.gif)
Если вкратце:
mass отвечает понятно за что;
linear drag и angular drag — линейное и угловое сопротивление, соответственно;
gravity scale — коэффициент гравитации для конкретно этого объекта;
fixed angle отключает переворот персонажа при столкновении с чем-нибудь, допустим, летящим;
isKinematic фиксирует объект раз и навсегда в одной точке;
interpolate устанавливает режим сглаживания при отрисовке персонажа;
Для платформера стандартное значение гравитации (-9.81 по оси Y) не очень подходит, поэтому изменим его на какое-нибудь магическое число. Например, -30. Для этого зайдем в Edit — Project Settings — Physics2D и заменим нужное значение в инспекторе.
![](https://habrastorage.org/files/f62/a9c/cde/f62a9ccded6d40d990cb7673091142dd.gif)
На этом пока перестанем добавлять персонажу компоненты. Но сделаем кое-что из него. Для того, чтобы нам не приходилось тысячу раз добавлять одинаковые компоненты на каждом, допустим, уровне, в Unity есть механика под названием prefabs. Она позволяет создать из игрового объекта «болванку», которую можно использовать много раз и менять как своей душе угодно, не боясь за то, что какие-то экземпляры могут не измениться. Для создания префаба достаточно просто перетащить объект из иерарахии во вкладку assets. В моем случае еще и в папку prefabs.
![](https://habrastorage.org/files/42c/bc0/0f5/42cbc00f52c44803ac199838505a7c92.gif)
Как видите, оба экземпляра героя прекрасно создаются и существуют вместе. Теперь нужно создать платформу, на которой будет стоять наш большеносый друг. Перетащим спрайт на сцену и добавим ему polygon collider. Размеры этого коллайдера, к слову, можно менять, перетаскивая его вершины с зажатой кнопкой shift.
![](https://habrastorage.org/files/38e/1bb/6ce/38e1bb6ce7c04a9098d464142fd46348.gif)
Самое время научить персонажа двигаться. Перетащим заранее подготовленный скрипт (его нужно скачать и сохранить в папку assets) прямо на персонажа в hierarchy view.
![](https://habrastorage.org/files/e90/246/346/e902463464254cff99178154ca370a0f.gif)
![](https://habrastorage.org/files/c7a/cde/54c/c7acde54c1e544f08b35bdefb055352a.png)
У этого кусочка кода есть ряд параметров, которые отвечают за поведение героя в игре.
maxSpeed и JumpForce — максимальная скорость (по горизонтали) и сила прыжка. Экспериментально проверено, что для массы, равной единице, и гравитации -30 значения maxSpeed=10 и jumpForce = 700 являются оптимальными.
groundCheck — дочерний объект, находящийся в нижней точке спрайта и отвечающий за определение того, находится ли нечто, чем мы управляем, на «земле»
whatIsGround — что, собственно, считать землей. В нашем случае «землей» считается все, кроме персонажа
groundRadius — некая величина, в пределах которой проверяется столкновение с поверхностью.
В итоге, строчка grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); проверяет, пересекает ли groundCheck с радиусом groundRadius поверхность и, допустим, запрещает прыгать в нужных случаях.
![](https://habrastorage.org/files/e82/2a7/5ff/e822a75ff065418f89d9c6cdfc354462.gif)
Давайте, наконец, запустим игру и посмотрим что же у нас сегодня получилось. Для этого нажмем кнопку Play в верхн… Да ладно, вы и сами это разглядели :)
![](https://habrastorage.org/files/632/c95/1c2/632c951c2aba49f7b73e7bcff8dcebe4.gif)
Герой прекрасно двигается (хотя, возможно, и не совсем прекрасно), и это создает для нас отличные предпосылки продолжить создание платформера.
А в следующей части мы разберемся как управлять камерой, узнаем кому нужно зажигание звезд и создадим самого первого врага. И да, попутно исправим один критический баг, беспечно пропущенный в статью во время этого урока. Догадаетесь, какой?
Если эта статья вдруг пробудила в вас желание написать собственную игру, то не растрачивайте его впустую! Прямо сейчас проходит конкурс, стать участником которого слишком просто: достаточно зарегистрироваться, выложить свою игру в store и дождаться объявления результатов. А победителей ждут Xbox One и великолепные Lumia 930!
Пойду дописывать свой Angry Flappy Swompy 3 Deluxe. Stay tuned, вторая часть статьи в ближайшие дни!
p.s.
Платформа.png
Персонаж.png (огромное спасибо Анастасии Гарань за отрисовку героя)
А вот и другие наши статьи по схожей тематике: