OverlapSphere i SphereCast
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 40 z 71.
Promień pyta o linię. Physics.OverlapSphere(center, radius) pyta o obszar w kształcie kuli: zwraca tablicę wszystkich colliderów, które dotykają kuli w punkcie center, bez kierunku i odległości. Ta bomba niszczy każdą skrzynię w promieniu 3 jednostek, gdy wybucha:
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 collider bomby, ponieważ testy nakładania się nie pomijają collidera, wewnątrz którego się zaczynają. Dlatego pętla sprawdza tag przed podjęciem działania. Właściwość attachedRigidbody każdego collidera zwraca Rigidbody, do którego on należy, lub 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 collider, na który kula by natrafiła. Głaz o promieniu 1, toczący się w stronę szczeliny o szerokości 1.5 między dwoma słupkami, pyta tę metodę, czy się zmieści: cienki promień poprowadzony środkiem szczeliny niczego nie trafia, a rzut kuli trafia w słupek. Podobnie jak promień, rzut kuli pomija collidery, których dotyka już w miejscu, w którym się zaczyna.
Wyzwanie
ŚredniNadaj działu szeroką wiązkę za pomocą Physics.SphereCast.
- Po naciśnięciu spacji omiataj przestrzeń sferą:
Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range). - Po trafieniu zapisz w logu
"Hit " + hit.collider.name(pierwszy strzał zapisuje w loguHit Pole) i zniszcz ten obiekt. - Po chybieniu zapisz w logu
Miss.
Naciśnij „Graj” i strzel trzy razy: najpierw znika Pole, potem Crate, a następnie pojawia się Miss. Potem naciśnij „Sprawdź”.
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.
}
}
}
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 drzwi6Raycasty
Physics.RaycastRaycastHitSprawdzanie podłoża za pomocą promieniaWarstwy i LayerMaskLinia widzeniaOverlapSphere i SphereCastPodsumowanie: laserowa barieraPoćwicz samodzielnie: Edytor online Unity