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.
Görev
OrtaTopa Physics.SphereCast ile geniş bir ışın ver.
- Space tuşuna basıldığında bir küreyi tara:
Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range). - Bir çarpışma olduğunda
"Hit " + hit.collider.namekaydını yazdır (ilk atıştaHit Poleyazdırılır) ve o nesneyi yok et. - Iska olduğunda
Misskaydı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
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir DuvarKendi başına pratik yap: Unity playground