Запуск
Урок 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 единиц в секунду.
Задание
ЛегкоМяч находится на платформе, пока пробел не запустит его.
- В
Ballдобавьbool launched;иpublic void Launch(Vector3 direction):launched = true;иrb.linearVelocity = direction.normalized * speed; - В
Update()выполни возврат, если мяч запущен; иначе помести мяч вpaddle.position + Vector3.up * 0.5f. - Когда для пробела
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