Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Uzbró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 radius do przodu od armaty na odległość range.
  • Jeśli coś trafi, zapisz w logu Hit Pole wraz 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.
        }
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Fizyka i rozgrywka