Menu
CoddyTech

Tocząca się piłka

Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 28 z 71.

W tym rozdziale powstaje mała gra Coin Rush. Toczysz piłkę po ogrodzonej arenie za pomocą strzałek i zbierasz monety, zanim skończy się czas. Dwa skrypty dzielą się zadaniami, tak jak w projekcie Unity: Ball porusza piłką i będzie przechowywać wynik oraz czas, a Coin znajduje się na każdej monecie. Coin.cs zaczyna jako pusta klasa, a w następnej lekcji ją uzupełnisz.

Piłka toczy się, gdy ją popychasz, zamiast ustawiać ją w wybranym miejscu. Popychaj jej komponent Rigidbody za pomocą AddForce i pozostaw jej swobodę obrotu: siła porusza piłkę, a tarcie podłogi chwyta jej spód i wprawia ją w obrót. Ta kula do kręgli toczy się po torze, gdy przytrzymujesz Spację:

public float push = 6f;
private Rigidbody rb;

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

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(Vector3.forward * push);
    }
}

Piłka tocząca się bez poślizgu obraca się z prędkością równą jej prędkości podzielonej przez promień, więc piłka o promieniu 0.5 poruszająca się z prędkością 3 jednostek na sekundę obraca się z prędkością 6 radianów na sekundę (rb.angularVelocity). Zamiast tego zmień jej transform.position albo zablokuj obrót w sekcji Constraints komponentu Rigidbody, a będzie ślizgać się jak krążek, nie obracając się. Zwykła, jednokolorowa kula wygląda tak samo w obu przypadkach: aby zobaczyć obrót, obserwuj Angular Velocity w sekcji Info komponentu Rigidbody podczas gry.

challenge icon

Wyzwanie

Średni

Rozpocznij Coin Rush: poruszaj piłką za pomocą strzałek.

  1. W Start() w pliku Ball.cs ustaw rb = GetComponent<Rigidbody>();.
  2. W FixedUpdate() odczytaj float x = Input.GetAxis("Horizontal"); oraz float z = Input.GetAxis("Vertical");, a następnie wywołaj rb.AddForce(new Vector3(x, 0f, z) * force);.

Naciśnij „Graj”, kliknij okno gry i poruszaj piłką: piłka obraca się podczas ruchu. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

public class Ball : MonoBehaviour
{
    public float force = 10f;
    private Rigidbody rb;

    void Start()
    {
    }

    void FixedUpdate()
    {
        // Poruszaj piłką za pomocą strzałek: Horizontal wzdłuż osi x, Vertical wzdłuż osi z.
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity