Создание игры 2d Pong

pong

Оригинал урока можно прочитать по ссылке.

В этом уроке мы будем делать классический Pong 2d.

Откроем 2d проект в unity и начнем создавать объекты. Нам понадобятся мяч, ракетка, кирпич и 5 границ. Установите границы, ракетку и мяч как показано на картинке ниже.

Screen-Shot

Добавим компонент BoxCollider2D к границам и ракеткам, и CircleCollider2D к мячу. Так же добавьте компонент Rigidbody2D к мячу и ракетке.

Настройки Rigidbody2D для ракетки должны выглядеть следующим образом:

rb_paddle

А настройки для мяча будут такими:

rb_ball

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

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

Создадим C# скрипт с именем Paddle. С помощью этого скрипта мы делаем движения по оси Х между границами. Напишем код для ввода с клавиатуры.

Использование функции FixedUpdate() для перемещения объектов Rigidbody  лучше, чем Update() (более подробно с функциейFixedUpdate() можно ознакомится в официальной документации). Привяжем этот скрипт к объекту ракетки и протестируем. Ракетка должна двигаться вправо и влево и останавливаться если попадает на стены.

Для того, что бы мяч отскакивал от стен, кирпичей и ракетки, самый простой способ создать 2D физический материал под названием Ball и настроить его как на картинке ниже. Назначим его вместо материала коллайдера мяча.

ball_mat

Создадим скрипт с именем Ball:

Привяжем его к объекту мяч и проверим. Мяч движется и отскакивает от стен и ракетки. Теперь мы должны создать различное поведение мяча в зависимости от того на какую част ракетки он попадёт. Разделим ракетку на 3 части, если мяч попадает в центр, то отскакивает на фиксированный угол. Если мяч попадает в правую или левую часть, он движется вправо или влево. Мы будем управлять этим движением путем сравнения положения мяча и ракетки по оси X. Это значит, если (X координата мяча) — (X координата ракетки) < 0, то мяч попал в левую часть, если (X координата мяча) — (X координата ракетки) > 0, мяч попал на правую часть, (X координата мяча) — (X координата ракетки) = 0 мяч попал по середине.

Создадим функцию для получения места столкновения:

Добавим вызов этой функции в OnCollisionEnter2D()

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

Уничтожаем кирпичи, когда мяч попадает в них. Код для функции OnCollisionEnter2D() в скрипте Ball

Всё готово!