Menu
CoddyTech

Wystrzelenie

Lekcja 2 z 16 w kursie Gra w Unity: Zbijanie klocków w Coddy.

Piłka czeka na paletce, aż gracz ją wystrzeli. Do tego czasu skrypt umieszcza ją co klatkę na paletce, więc porusza się tam, gdzie ona, a wartość bool zapamiętuje, czy piłka została już wystrzelona. Wystrzelenie jednorazowo ustawia linearVelocity obiektu Rigidbody. Grawitacja w Rigidbody piłki jest wyłączona, więc od tej chwili piłka leci po linii prostej z tą prędkością, aż w coś uderzy.

Spławik wędkarski działa tak samo: zwisa pod szczytówką wędki aż do zarzucenia.

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 ma wartość true tylko w klatce, w której klawisz zostaje wciśnięty, więc odczytuje się ją w Update(), która uruchamia się raz na klatkę. Spławik leci z prędkością równą długości wektora (4, 3, 0), czyli 5 jednostek na sekundę. Aby wystrzelić go z dokładną prędkością w dowolnym kierunku, ustaw długość wektora kierunku na 1 jednostkę za pomocą .normalized, a następnie pomnóż go przez prędkość.

challenge icon

Wyzwanie

Łatwy

W Ball:

  1. Dodaj bool launched.
  2. Napisz public void Launch(Vector3 direction): ustawia launched na true, a linearVelocity obiektu Rigidbody na kierunek o długości 1 jednostki pomnożony przez speed.
  3. Dodaj Update(). Gdy piłka nie została wystrzelona, umieszcza ją 0.5 jednostki nad pozycją paletki, a po naciśnięciu spacji wywołuje Launch(new Vector3(0.3f, 1f, 0f)).

Piłka nie odbija się jeszcze, więc zatrzymuje się od razu przy pierwszej napotkanej ścianie: następna lekcja to naprawi.

Naciśnij Play, porusz paletką, wystrzel piłkę, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    // Następnie: piłka pozostaje na paletce, dopóki Space jej nie wystrzeli.
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra w Unity: Zbijanie klocków