Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Przesuwaj paletkę między ścianami.

  1. W metodzie FixedUpdate() klasy Paddle ustaw float input na -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.
  2. Oblicz Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
  3. Używając float half = transform.localScale.x / 2f;, ogranicz target.x do zakresu od -wallX + half do wallX - half, a następnie wykonaj rb.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