Menu
CoddyTech

Запуск

Урок 2 из 16 курса Игра в Unity: арканоид на Coddy.

Мяч ждёт на платформе, пока игрок не запустит его. До этого момента скрипт каждый кадр помещает его над платформой, поэтому он перемещается вместе с ней, а bool запоминает, был ли он запущен. При запуске Rigidbody один раз задаётся значение linearVelocity. Гравитация у Rigidbody мяча отключена, поэтому после запуска он летит по прямой с этой скоростью, пока во что-нибудь не врежется.

Рыболовный поплавок работает так же: он свисает с кончика удилища до заброса.

bool cast;

void Update()
{
    if (cast) return;
    transform.position = rodTip.position + Vector3.down * 1.5f;
    if (Keyboard.current.spaceKey.wasPressedThisFrame)
    {
        cast = true;
        rb.linearVelocity = new Vector3(4f, 3f, 0f);
    }
}

wasPressedThisFrame имеет значение true только в кадр, когда клавиша нажимается, поэтому его проверяют в Update(), которая выполняется один раз за кадр. Поплавок летит со скоростью, равной длине вектора (4, 3, 0), то есть 5 единиц в секунду. Чтобы запустить его с точной скоростью в любом направлении, задайте направление длиной 1 единица с помощью .normalized, а затем умножьте его на скорость.

challenge icon

Задание

Легко

В Ball:

  1. Добавь bool launched.
  2. Напиши public void Launch(Vector3 direction): он устанавливает для launched значение true, а для linearVelocity у Rigidbody — направление длиной 1 единица, умноженное на speed.
  3. Добавь Update(). Пока мяч не запущен, он помещает его на 0.5 единицы выше позиции платформы, а при нажатии Space вызывает Launch(new Vector3(0.3f, 1f, 0f)).

Мяч пока не отскакивает, поэтому он сразу останавливается при первом столкновении со стеной: в следующем уроке это будет исправлено.

Нажми Play, перемести платформу, запусти мяч, затем нажми Check.

Попробуйте сами

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    // Далее: мяч остаётся на ракетке, пока нажатие Space не запустит его.
}
quiz iconПроверьте себя

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

Все уроки раздела Игра в Unity: арканоид