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.
Wyzwanie
ŚredniDodaj 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.
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Fizyka i rozgrywka
1Ciało sztywne
Grawitacja i masaPopychanie za pomocą AddForceSkok z impulsemFixedUpdate dla fizykiPrędkośćCiała kinematycznePowtórka: platforma startowa2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur