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.
Wyzwanie
ŚredniUstaw 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
reachjednostek. - 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.
}
}
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