Запуск
Урок 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, а затем умножьте его на скорость.
Задание
ЛегкоВ Ball:
- Добавь
bool launched. - Напиши
public void Launch(Vector3 direction): он устанавливает дляlaunchedзначение true, а дляlinearVelocityу Rigidbody — направление длиной 1 единица, умноженное наspeed. - Добавь
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 не запустит его.
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.