Menu
CoddyTech

RaycastHit

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

Physics.Raycast może też powiedzieć, w co trafił. Dodaj out RaycastHit hit po kierunku: gdy metoda zwraca true, wypełnia hit szczegółami. out to sposób, w jaki metoda C# zwraca dodatkową wartość za pośrednictwem przekazanej jej zmiennej. Ten dalmierz zapisuje w logu, na co wskazuje i jak daleko to jest, gdy naciśniesz spację:

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
        {
            Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
        }
    }
}

Gdy jest skierowany na ścianę, której przednia powierzchnia znajduje się 12 jednostek przed nim, zapisuje w logu Wall is 12 units away. Pozostałe pola: hit.point to punkt w świecie, w którym promień dotknął powierzchni, hit.normal to kierunek, w którym zwrócona jest powierzchnia w tym punkcie ((0, 1, 0) na płaskim podłożu), a hit.transform to Transform trafionego obiektu. Za pomocą hit.collider.gameObject uzyskasz dostęp do innych informacji o nim, takich jak jego tag.

Odczytuj hit tylko wewnątrz if. Gdy promień nie trafi, Raycast zwraca false, a hit nie zawiera niczego użytecznego: jego collider ma wartość null.

challenge icon

Wyzwanie

Średni

Dodaj broni celownik laserowy. Skrypt LaserSight znajduje się na obiekcie Gun, a Inspector przypisuje mu czerwony punkt dot (Transform) oraz zasięg range równy 15. Strzałki w lewo i w prawo obracają broń.

  • W każdej klatce wystrzel promień z broni w kierunku jej własnego przodu, o długości równej range.
  • Gdy coś trafi, pokaż punkt i umieść go dokładnie w miejscu, w którym promień dotknął powierzchni.
  • Gdy niczego nie trafi, ukryj punkt za pomocą SetActive(false).

Obiekt Dot znajduje się na warstwie Ignore Raycast, więc promień przechodzi przez sam punkt. Naciśnij Play i przesuwaj laser po ścianie, skrzyni i beczce, a następnie kliknij Check.

Spróbuj swoich sił

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // Umieść punkt tam, gdzie laser pada na powierzchnię; ukryj go, gdy laser w nic nie trafia.
    }
}
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