Menu
CoddyTech

OverlapSphere ve SphereCast

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

Bir ışın bir doğru hakkında soru sorar. Physics.OverlapSphere(center, radius) top biçimli bir bölge hakkında soru sorar: center noktasındaki bir küreye değen tüm çarpıştırıcıların dizisini döndürür; yönü ve mesafesi yoktur. Bu bomba patladığında 3 birim içindeki tüm kasaları 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ü örtüşme testleri, başladıkları noktada içinde bulundukları ç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 olur.

Physics.SphereCast(origin, radius, direction, out hit, maxDistance) kalın bir ışındır: bir küreyi çizgi 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ı buna sorar: aralığın ortasından geçen ince bir ışın hiçbir şeye çarpmazken küre taraması bir direğe çarpar. Bir ışın gibi, küre taraması da başladığı yerde zaten temas ettiği çarpıştırıcıları atlar.

challenge icon

Görev

Orta

Topu geniş bir ışınla donat. Beam betiği Cannon'ın üzerinde bulunur ve Inspector, betiğe 0.5 değerinde bir radius ve 12 değerinde bir range verir. Sol ve sağ ok tuşları topu döndürür.

  • Space tuşuna basıldığında, toptan ileriye doğru radius yarıçapında ve range birim uzunluğunda bir küre taraması yap.
  • Bir şeye çarparsa, çarptığı nesnenin adıyla birlikte Hit Pole kaydını yazdır ve o nesneyi yok et.
  • Hiçbir şeye çarpmazsa Miss kaydını yazdır.

İnce Pole, topun merkez çizgisinin biraz yanında duruyor. Play'e basıp ateş et, ardından Check'e 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 nesneyi yok et.
        }
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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