Linia widzenia
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 39 z 71.
Bycie blisko strażnika to nie to samo, co bycie przez niego zauważonym: ściana pomiędzy wami zasłania widok. Aby sprawdzić, czy strażnik widzi cel, wystrzel promień z jego oka w kierunku celu i sprawdź, czy pierwszą rzeczą, w którą trafi, jest sam cel. Kierunek to pozycja celu pomniejszona o twoją pozycję, a promień o takiej długości dosięga celu:
public Transform target;
bool CanSee()
{
Vector3 toTarget = target.position - transform.position;
if (Physics.Raycast(transform.position, toTarget, out RaycastHit hit, toTarget.magnitude))
{
return hit.transform == target;
}
return false;
}Kamera monitoringu na filarze zapisuje I see you, gdy CanSee() zwraca true. Gdy cel znajduje się na otwartej przestrzeni, promień trafia najpierw w cel. Gdy cel znajduje się za skrzynią, promień trafia najpierw w skrzynię, hit.transform wskazuje skrzynię, a wynikiem jest false. Samo Physics.Raycast również zwraca true dla skrzyni, dlatego trafienie jest porównywane z celem.
Cel musi mieć collider, aby promień mógł go wykryć. Kierunek promienia nie musi być znormalizowany, ponieważ jego długość wynika z maxDistance. Physics.Linecast(from, to) sprawdza to samo w odwrotny sposób — czy między dwoma punktami znajduje się jakiś collider: !Physics.Linecast(eye, target.position, wallMask) oznacza, że na drodze nie ma ściany.
Wyzwanie
ŚredniPokoloruj wartownika na czerwono, gdy widzi gracza, a w przeciwnym razie na zielono.
- Napisz
bool CanSee(): użyjVector3 toPlayer = player.position - transform.position;, zwróćfalse, gdytoPlayer.magnitude > range. - Następnie wywołaj rzutowanie
Physics.Raycast(transform.position, toPlayer, out RaycastHit hit, range)i zwróćhit.transform == player; jeśli nic nie zostanie trafione, zwróćfalse. - W
Update()ustaw kolor wieży naColor.redlubColor.greenw zależności od wynikuCanSee().
Naciśnij „Graj” i przejdź za ścianę. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class Sentry : MonoBehaviour
{
public Transform player;
public float range = 8f;
void Update()
{
// Czerwony, gdy strażnik widzi gracza, w przeciwnym razie zielony.
}
}
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 startowa4Korutyny
WywoływanieInvokeRepeating i CancelInvokeTwoja pierwsza korutynaPętle w korutynachZatrzymywanie korutynPodsumowanie: odliczanie10Projekt: Ucieczka z areny
ArenaŁowcy2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur5Projekt: Wyścig po monety
Tocząca się piłkaZbieranie monet3Wyzwalacze
Kolizje wyzwalająceOnTriggerEnterPrzedmioty do zebraniaSkrzynie zatrzymują resztęStrefy śmierciWejście i wyjściePodsumowanie: klucz i drzwiPoćwicz samodzielnie: Edytor online Unity