В этом уроке мы продолжим делать в Unity 2D игру наподобие Flappy Bird, выпущенной в 2013 году и ставшей самой скачиваемой в iOS App в январе 2014 года.
В прошлом уроке Игра Flappy Bird на Unity 2D мы занимались созданием проекта, поработали с фоном игры и земной поверхностью. Теперь настало время заняться нашим пернатым другом.
Отрисовываем птицу
Начнем с рисования летающей птицы, анимация полета которой состоит из 4 кадров:
Кликните правой кнопкой мыши на изображении выше, нажмите на Save As... (Сохранить как...) и сохраните картинку в папке Assets/Sprites. Мы будем использовать следующий Импорт настроек:
Наше изображение птицы состоит из несколько небольших изображений, поэтому очень важно, чтобы мы выбрали Multiple
в Sprite Mode (Режим спрайта). После этого мы можем нажать на кнопку Sprite Editor (Редактор Спрайта):
В Редакторе спрайтов мы задаем сетку размером 16x16.
После нажатия кнопки Slice мы можем закрыть редактор спрайтов. Unity спросит, хотите ли вы применить Unimported Import Settings (Неимпортированные Настройки Импорта), выберем Apply (Применить).
Теперь мы можем видеть наши 4 ломтика как потомков изображения bird в Project Area:
Анимация птицы
Давайте выберем все кусочки картинки, а затем перетаскиваем их в Иерархию:
Unity знает, что мы хотим создать анимацию из этих кусочков и поэтому он спросит нас куда сохранять файлы анимации. Мы создадим новую папку BirdAnimation, а затем сохраним анимацию как fly.anim.
После этого мы можем увидеть два новых файла в нашей папке BirdAnimation:
Файл bird_0 - это конечный автомат, который управляет состоянием и скоростью анимации. Второй файл – сама анимация fly. Давайте быстро сделаем двойной клик по файлу bird_0, чтобы увидеть конечный автомат этой анимации:
Мы не должны беспокоиться о анимации состояний, потому что у нас есть только одна анимация. Нажмите на состояниеfly, а затем уменьшите speed до 0.5
в Инспекторе:
Поскольку у нас есть только одна анимация, то мы все сделали. Если мы нажмем на Play, то сможем увидеть анимацию в действии:
Физика движений птицы
Наша птица должна быть частью физического мира. Дадим ей коллайдер так же, как мы сделали с землей. Выберите Add Component→Physics 2D→Circle Collider 2D в Инспекторе:
Теперь вся физика устроена так, что все, что должно вращаться, требует Rigidbody (Твердое тело). Оно берет на себя такие параметры, как гравитация, скорость, и силу движений. Мы можем добавить Rigidbody выбрав Add Component→Physics 2D→Rigidbody 2D в Инспекторе. Мы также включим свойство Fixed Angle, чтобы птица не стала вращаться.
Если мы нажмем на Play, то сможем увидеть как же функционирует параметр гравитации жесткого тела:
Скрипт перемещения птицы
Наша птица уже выглядит довольно прилично, но она также должна лететь все время вправо, махать крыльями и взлетать вверх, если пользователь нажмет на кнопку.
Такое поведение может быть реализовано с помощью скрипта. Выберем Add Component→New Script в Инспекторе, назовем его Bird и выберем язык CSharp. Мы также создадим новую папку Scripts в нашей Project Area чтобы мы могли поместить в неё скрипт Bird:
Дважды щелкните на скрипт, чтобы открыть его:
using UnityEngine;
using System.Collections;
public class Bird : MonoBehaviour {
// Используйте эту функцию для инициализации
void Start () {
}
// Update вызывается один раз за кадр
void Update () {
}
}
Можно сделать так, чтобы птица всегда летела вправо, добавив новую переменную speed, а затем используя Rigidbody-свойство velocity (velocity - это как раз направление движения, умноженное на скорость движения):
using UnityEngine;
using System.Collections;
public class Bird : MonoBehaviour {
// Скорость перемещения
public float speed = 2;
// Используйте эту функцию для инициализации
void Start () {
// Летим в правую сторону
GetComponent<Rigidbody2D>().velocity = Vector2.right * speed;
}
// Update вызывается один раз за кадр
void Update () {
}
}
Если вы сохраните скрипт и нажмете на Play, то вы увидите как птица летит по направлению к правой части экрана. Отлично. Теперь мы создадим новую переменную force, а затем используем нашу функцию Update для проверки нажатия клавиши. Если пользователь нажмет на клавишу Space (Пробел), то птица должна лететь вверх:
using UnityEngine;
using System.Collections;
public class Bird : MonoBehaviour {
// Скорость перемещения
public float speed = 2;
// Flap force
public float force = 300;
// Используйте эту функцию для инициализации
void Start () {
// Летим в правую сторону
GetComponent<Rigidbody2D>().velocity = Vector2.right * speed;
}
// Update вызывается один раз за кадр
void Update () {
// Взлет
if (Input.GetKeyDown(KeyCode.Space))
GetComponent<Rigidbody2D>().AddForce(Vector2.up * force);
}
}
Если нажать Play, то птица взлетит вверх:
Осталась последняя вещь, которую мы хотели бы сделать здесь. Нам нужно перезапускать игру как только птица сталкивается с землей или с препятствием. Наш пернатый друг уже имеет Collider и Rigidbody - это означает, что Unity автоматически вызывает функцию OnCollisionEnter2D. Все, что нам нужно сделать, - это добавить эту функцию в наш скрипт:
void OnCollisionEnter2D(Collision2D coll) {
// Перезапуск
Application.LoadLevel(Application.loadedLevel);
}
Application.LoadLevel может быть использована для загрузки сцены. Application.loadedLevel – сцена, загруженная в данный момент. Или, иными словами, мы просто перезагружаем текущую сцену.
Наш урок подошел к концу. На следующем занятии Игра Flappy Bird на Unity 2D. Часть 3 мы добавим в игру препятствия, чтобы в нее было интересно играть.