Menu
CoddyTech

Zasięg armaty

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

Armata stoi na jednym końcu strzelnicy, a trzy cele przesuwają się z boku na bok w poprzek strzelnicy, w różnych odległościach. Przechylaj lufę w górę i w dół, aby dosięgnąć każdej odległości, i oddawaj strzały w chwili, gdy cel przecina linię ognia. Kula, która trafi w cel, niszczy go i zostaje zużyta; wszystko inne, co uderzy w cel, pozostawia go w spokoju. Cele są ciałami kinematycznymi, więc trafienia nigdy ich nie popychają, a armata ma pięć kul.

Napisz dwa skrypty: Cannon dla lufy i Target dla każdego celu.

challenge icon

Wyzwanie

Trudny

Inspector przypisuje Cannon wartość ballPrefab (prefab Ball typu Rigidbody, masa 2, z tagiem Ball), angle (30), turnSpeed (40), power (30) i balls (5).

  • Strzałka w górę zwiększa angle, a strzałka w dół go zmniejsza z szybkością turnSpeed stopni na sekundę, nigdy poniżej 10 ani powyżej 60. W każdej klatce ustaw obrót lufy na Quaternion.Euler(-angle, 0, 0): w Unity dodatni kąt x kieruje przód w dół, więc znak minus kieruje go w górę.
  • Spacja wystrzeliwuje kulę, jeśli balls jest większe od 0: utwórz ją 1 jednostkę przed środkiem lufy, wzdłuż lufy, nadaj jej impuls o wartości power wzdłuż lufy, odejmij 1 od balls i wyświetl pozostałą liczbę, na przykład Balls left: 4. Gdy nie ma już kul, spacja nic nie robi.

Każdy cel ma kinematyczny komponent Rigidbody, a Inspector przypisuje Target wartości speed i range (odpowiednio 2 i 3 dla Target1).

  • W każdym kroku fizyki przesuwaj cel wzdłuż osi x za pomocą MovePosition z szybkością speed jednostek na sekundę, zawracając go za każdym razem, gdy oddali się o range jednostek od miejsca, w którym się rozpoczął.
  • Gdy kula (z tagiem Ball) uderzy w cel, wyświetl nazwę celu i hit!, na przykład Target2 hit!, a następnie zniszcz zarówno cel, jak i kulę. Wszystko, co nie jest kulą, pozostawia cel bez zmian.

Naciśnij Play i zestrzel wszystkie trzy cele, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class Cannon : MonoBehaviour
{
    [SerializeField] private Rigidbody ballPrefab;
    [SerializeField] private float angle = 30f;
    [SerializeField] private float turnSpeed = 40f;
    [SerializeField] private float power = 30f;
    [SerializeField] private int balls = 5;

    void Update()
    {
        // Celuj strzałkami w górę i w dół, strzelaj klawiszem Space
    }
}
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Fizyka i rozgrywka