OverlapSphere i SphereCast
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 38 z 63.
Promień pyta o linię. Physics.OverlapSphere(center, radius) pyta o obszar w kształcie kuli: zwraca tablicę wszystkich koliderów, które dotykają kuli w punkcie center, bez kierunku i odległości. Ta bomba niszczy każdą skrzynię w promieniu 3 jednostek w chwili wybuchu:
void Explode()
{
Collider[] hits = Physics.OverlapSphere(transform.position, 3f);
foreach (Collider c in hits)
{
if (c.CompareTag("Crate"))
{
Destroy(c.gameObject);
}
}
Destroy(gameObject);
}Tablica zawiera wszystko, co znajduje się w zasięgu: podłogę, ściany i własny kolider bomby, ponieważ testy nakładania się nie pomijają kolidera, wewnątrz którego się zaczynają. Dlatego pętla sprawdza tag przed podjęciem działania. Właściwość attachedRigidbody każdego kolidera wskazuje komponent Rigidbody, do którego on należy, albo null w przypadku obiektów statycznych, takich jak podłoga.
Physics.SphereCast(origin, radius, direction, out hit, maxDistance) to gruby promień: przesuwa kulę wzdłuż linii i zgłasza pierwszy kolider, na który kula by się natknęła. Głaz o promieniu 1, toczący się w stronę szczeliny o szerokości 1.5 między dwoma słupkami, za pomocą tej funkcji sprawdza, czy się zmieści: cienki promień poprowadzony przez środek szczeliny niczego nie wykryje, a rzut kuli wykryje słupek. Podobnie jak promień, rzut kuli pomija kolidery, których już dotyka w miejscu, w którym się zaczyna.
Wyzwanie
ŚredniUzbrój armatę w szeroką wiązkę. Skrypt Beam znajduje się na armacie, a Inspector ustawia dla niego radius na 0.5 i range na 12. Strzałki w lewo i w prawo obracają armatę.
- Po naciśnięciu spacji przesuń sferę o promieniu
radiusdo przodu od armaty na odległośćrange. - Jeśli coś trafi, zapisz w logu
Hit Polewraz z nazwą trafionego obiektu i zniszcz ten obiekt. - Jeśli niczego nie trafi, zapisz w logu
Miss.
Cienki słup stoi nieco z boku osi armaty. Naciśnij Play i strzel, a następnie Check.
Spróbuj swoich sił
using UnityEngine;
public class Beam : MonoBehaviour
{
public float radius = 0.5f;
public float range = 12f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Przesuń kulę o promieniu radius do przodu: zniszcz pierwszy obiekt, w który trafi.
}
}
}
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