Menu
CoddyTech

OverlapSphere ve SphereCast

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 40 / 71.

Bir ışın bir doğruyu sorgular. Physics.OverlapSphere(center, radius) ise top şeklindeki bir bölgeyi sorgular: center noktasındaki bir küreye dokunan her çarpıştırıcıyı içeren bir dizi döndürür; yönü ve mesafesi yoktur. Bu bomba patladığında 3 birim içindeki tüm sandıkları yok eder:

void Explode()
{
    Collider[] hits = Physics.OverlapSphere(transform.position, 3f);
    foreach (Collider c in hits)
    {
        if (c.CompareTag("Crate"))
        {
            Destroy(c.gameObject);
        }
    }
    Destroy(gameObject);
}

Dizi, erişim alanındaki her şeyi içerir: zemini, duvarları ve bombanın kendi çarpıştırıcısını; çünkü çakışma testleri, testin başladığı yerin içindeki çarpıştırıcıyı atlamaz. Bu nedenle döngü, işlem yapmadan önce etiketi kontrol eder. Her çarpıştırıcının attachedRigidbody özelliği, ait olduğu Rigidbody'dir; zemin gibi statik nesneler içinse null değerini alır.

Physics.SphereCast(origin, radius, direction, out hit, maxDistance) kalın bir ışındır: bir küreyi doğru boyunca tarar ve kürenin çarpacağı ilk çarpıştırıcıyı bildirir. Yarıçapı 1 olan ve iki direk arasındaki genişliği 1.5 olan bir aralığa doğru yuvarlanan bir kaya, sığıp sığmadığını bu yöntemle sorgular: aralığın ortasından geçen ince bir ışın hiçbir şeye çarpmazken küre taraması bir direğe çarpar. Işın gibi, küre taraması da başlangıç noktasında zaten dokunduğu çarpıştırıcıları atlar.

challenge icon

Görev

Orta

Topa Physics.SphereCast ile geniş bir ışın ver.

  1. Space tuşuna basıldığında bir küreyi tara: Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range).
  2. Bir çarpışma olduğunda "Hit " + hit.collider.name kaydını yazdır (ilk atışta Hit Pole yazdırılır) ve o nesneyi yok et.
  3. Iska olduğunda Miss kaydını yazdır.

“Oyna” düğmesine bas ve üç kez ateş et: önce Pole, sonra Crate gider, ardından Miss olur. Sonra “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Beam : MonoBehaviour
{
    public float radius = 0.5f;
    public float range = 12f;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // radius yarıçaplı bir küreyi ileri doğru süpür: çarptığı ilk şeyi yok et.
        }
    }
}

Fizik ve Oynanış bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground