Menu
CoddyTech

RaycastHit

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

Physics.Raycast może również powiedzieć, w co trafił. Dodaj out RaycastHit hit po kierunku: gdy metoda zwraca true, wypełnia hit szczegółami trafienia. out to sposób, w jaki metoda C# zwraca dodatkową wartość za pośrednictwem przekazanej jej zmiennej. Ten dalmierz zapisuje w logu, w co jest skierowany i jak daleko znajduje się ten obiekt, 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");
        }
    }
}

Skierowany na ścianę, której przód znajduje się 12 jednostek dalej, 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 tym obiekcie, takich jak jego tag.

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

challenge icon

Wyzwanie

Średni

Dodaj do pistoletu celownik laserowy: czerwoną kropkę w miejscu, w którym pada wiązka lasera.

  1. W Update() wywołaj Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range).
  2. Gdy promień trafi, wywołaj dot.gameObject.SetActive(true); i ustaw dot.position = hit.point;.
  3. Gdy promień nie trafi, wywołaj dot.gameObject.SetActive(false);.

Naciśnij „Graj” i obróć pistolet: kropka przesuwa się po ścianie i skrzyniach. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

    void Update()
    {
        // Umieść dot w miejscu, w którym laser trafia w powierzchnię; ukryj go, gdy laser w nic nie trafia.
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity