Menu
CoddyTech

Physics.Raycast

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

Raycast wysyła 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 jest skierowany przed jego przód; Vector3.forward zawsze wskazywałoby 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 wykrywa samego siebie. Pomiń maxDistance, a promień będzie biegł w nieskończoność: samochód hamowałby przed ścianą po drugiej stronie mapy.

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

challenge icon

Wyzwanie

Średni

Spraw, aby drzwi do sklepu otwierały się, gdy ktoś stoi pod czujnikiem.

  1. W Update() sprawdź Physics.Raycast(transform.position, Vector3.down, reach): promień skierowany pionowo w dół, o długości reach jednostek, który zatrzymuje się nad podłożem.
  2. Gdy warunek jest spełniony, wywołaj door.SetActive(false);, a w bloku else — door.SetActive(true);.

Naciśnij „Graj” i przeprowadź Visitor pod czujnikiem: drzwi się otwierają i zamykają za nim. Następnie naciśnij „Sprawdź”.

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.
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity