Utrzymaj prędkość
Lekcja 3 z 19 w kursie Gra w Unity: Brick Breaker w Coddy.
Piłka w grze Brick Breaker nigdy nie zwalnia. Jej PhysicsMaterial wykonuje większość pracy: sprężystość 1 zachowuje całą prędkość po odbiciu, a tarcie 0 zapobiega spowalnianiu jej przez ściany. Ściany nie mają materiału, a Unity domyślnie uśrednia wartości obu zderzaków: 1 piłki i 0 ściany sprawiają, że piłka odbija się z połową prędkości. bounceCombine = Maximum i frictionCombine = Minimum sprawiają, że wygrywają wartości samej piłki.
Fizyka nadal nie jest idealnie dokładna: poruszająca się paletka dodaje swoją prędkość, a drobne błędy kumulują się przez setki odbić. Dlatego w każdym kroku fizyki kierunek piłki pozostaje bez zmian, a jej prędkość jest przywracana do poprzedniej wartości:
rb.linearVelocity = rb.linearVelocity.normalized * 7f;Piłka, która zwolniła do 2 jednostek na sekundę, w następnym kroku znów porusza się z prędkością 7.
Wyzwanie
ŁatwySpraw, by piłka odbijała się bez końca z jednakową prędkością.
- W
Awake()klasyBallutwórznew PhysicsMaterial("Bouncy")z wartością bounciness równą 1, obydwoma współczynnikami tarcia równymi 0,bounceCombine = PhysicsMaterialCombine.MaximumifrictionCombine = PhysicsMaterialCombine.Minimum; ustaw go wGetComponent<Collider>().material. - Dodaj
FixedUpdate(): jeśli piłka została wystrzelona,rb.linearVelocity = rb.linearVelocity.normalized * speed;
Naciśnij „Graj” i wystrzel piłkę: odbija się od każdej ściany, nie zwalniając. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
using UnityEngine.InputSystem;
public class Ball : MonoBehaviour
{
public Transform paddle;
public float speed = 9f;
Rigidbody rb;
bool launched;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (launched) return;
transform.position = paddle.position + Vector3.up * 0.5f;
if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
}
public void Launch(Vector3 direction)
{
launched = true;
rb.linearVelocity = direction.normalized * speed;
}
}
Wszystkie lekcje w sekcji Gra w Unity: Brick Breaker
Poćwicz samodzielnie: Edytor online Unity