Paletka
Lekcja 1 z 19 w kursie Gra w Unity: Brick Breaker w Coddy.
W tym kursie zbudujesz grę Brick Breaker w 3D. W tej lekcji poznasz jej elementy: paletkę, odbijającą się piłkę, ścianę z klocków, życia, poziomy i ulepszenia. Wszystko porusza się w płaszczyźnie x i y, przy z równym 0. Skrypty Paddle, Ball, Brick, GameManager i PowerUp są na razie szablonami. Przycisk „Graj” uruchamia grę, a przycisk „Sprawdź” ocenia kod.
Paletka ma kinematyczny komponent Rigidbody, którym porusza się za pomocą rb.MovePosition w FixedUpdate(), dzięki czemu fizyka uwzględnia jej ruch. Kinematyczne ciało przenika przez ściany, więc skrypt utrzymuje je w ich obrębie. Ograniczenie położenia środka do ścian sprawiłoby, że połowa paletki znalazłaby się w ścianie: granicą jest położenie ściany pomniejszone o połowę szerokości. Przy ścianach w położeniach -6 i 6 oraz paletce o szerokości 2:
float half = 2f / 2f;
target.x = Mathf.Clamp(target.x, -6f + half, 6f - half);
rb.MovePosition(target);Środek pozostaje między -5 a 5, więc końce zatrzymują się dokładnie przy ścianach. Odczytywanie szerokości z transform.localScale.x na każdym kroku pozwala zachować prawidłowe ograniczenie, gdy paletka się powiększy.
Wyzwanie
ŁatwyPrzesuwaj paletkę między ścianami.
- W metodzie
FixedUpdate()klasyPaddleustawfloat inputna -1, gdy przytrzymujesz strzałkę w lewo lub A, na 1, gdy przytrzymujesz strzałkę w prawo lub D, a w przeciwnym razie na 0. - Oblicz
Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime; - Używając
float half = transform.localScale.x / 2f;, ogranicztarget.xdo zakresu od-wallX + halfdowallX - half, a następnie wykonajrb.MovePosition(target);
Naciśnij „Graj” i przesuń paletkę w obie ściany: zatrzyma się przy każdej z nich. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
using UnityEngine.InputSystem;
public class Paddle : MonoBehaviour
{
public float speed = 14f;
public float wallX = 8f; // Wewnętrzne powierzchnie bocznych ścian znajdują się na pozycjach -wallX i wallX
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Poruszaj się za pomocą klawiszy strzałek lub A i D i pozostań między ścianami.
}
}
Wszystkie lekcje w sekcji Gra w Unity: Brick Breaker
Poćwicz samodzielnie: Edytor online Unity