Menu
CoddyTech

Physics.Raycast

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

Raycast wystrzeliwuje niewidzialną linię z punktu w określonym kierunku i informuje, czy trafiła w collider. Physics.Raycast(origin, direction, maxDistance) zwraca true, gdy collider znajduje się na linii w odległości nie większej niż maxDistance jednostek, a w przeciwnym razie zwraca false. Ten samochód hamuje, gdy cokolwiek znajduje się mniej niż 2 jednostki przed jego przodem:

public float brakeDistance = 2f;

void Update()
{
    if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
    {
        Debug.Log("Brake!");
    }
}

transform.forward obraca się razem z samochodem, więc promień zawsze wskazuje kierunek od jego przodu; Vector3.forward zawsze wskazywałby wzdłuż osi z świata. Promień zaczyna się w środku samochodu, wewnątrz jego własnego collidera, a promień nigdy nie zgłasza collidera, wewnątrz którego się zaczyna, więc samochód nie widzi samego siebie. Jeśli pominiesz maxDistance, promień biegnie bez końca: samochód hamowałby przed ścianą po drugiej stronie mapy.

Promienie wykrywają collidery, a nie to, co jest rysowane: obiekt z Rendererem, ale bez collidera, jest dla nich niewidoczny, a collider typu trigger jest uznawany za trafienie. Podczas testowania Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) rysuje promień w widoku Scene w Unity.

challenge icon

Wyzwanie

Średni

Ustaw automatyczne otwieranie drzwi sklepu. Skrypt DoorSensor znajduje się na czujniku nad wejściem, 3.5 jednostki nad ziemią. W Inspectorze przypisz mu door oraz reach o wartości 3.

  • W każdej klatce rzuć promień z czujnika pionowo w dół, o długości reach jednostek.
  • Gdy promień trafia w jakiś obiekt, drzwi są otwarte: ukryj je za pomocą SetActive(false). Gdy promień niczego nie trafia, ponownie pokaż drzwi.

Ziemia znajduje się poza zasięgiem promienia, więc drzwi pozostają zamknięte, dopóki ktoś nie stanie pod czujnikiem. Naciśnij Play i strzałkami przeprowadź Visitor pod czujnik, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class DoorSensor : MonoBehaviour
{
    public GameObject door;
    public float reach = 3f;

    void Update()
    {
        // Otwieraj drzwi, dopóki promień skierowany w dół z Sensor trafia w jakiś obiekt.
    }
}
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