Menu
CoddyTech

Запуск

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

Мяч ждёт на ракетке, пока игрок не запустит его. До этого момента Update() каждый кадр помещает его над ракеткой, поэтому он движется вместе с ней, а bool запоминает, взлетел ли мяч:

void Update()
{
    if (launched) return;
    transform.position = paddle.position + Vector3.up * 0.5f;
}

На Rigidbody мяча не действует гравитация, поэтому заданная один раз скорость продолжает двигать его по прямой. wasPressedThisFrame принимает значение true только в кадр нажатия клавиши, поэтому проверяй его в Update(). Чтобы мяч двигался с точной скоростью в любом направлении, нормализуй вектор направления до длины 1 с помощью .normalized, а затем умножь его на скорость: new Vector3(3f, 4f, 0f).normalized * 10f задаёт скорость 10 единиц в секунду.

challenge icon

Задание

Легко

Мяч находится на платформе, пока пробел не запустит его.

  1. В Ball добавь bool launched; и public void Launch(Vector3 direction): launched = true; и rb.linearVelocity = direction.normalized * speed;
  2. В Update() выполни возврат, если мяч запущен; иначе помести мяч в paddle.position + Vector3.up * 0.5f.
  3. Когда для пробела wasPressedThisFrame, вызови Launch(new Vector3(0.3f, 1f, 0f)).

Нажми «Играть», перемести платформу, затем нажми пробел: мяч полетит вверх и остановится у первой стены (отскок будет добавлен позже). Затем нажми «Проверить».

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

using UnityEngine;
using UnityEngine.InputSystem;

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

    Rigidbody rb;

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

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

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

Потренируйтесь самостоятельно: Песочница Unity