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.
Görev
OrtaTopu 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
radiusyarıçapında verangebirim uzunluğunda bir küre taraması yap. - Bir şeye çarparsa, çarptığı nesnenin adıyla birlikte
Hit Polekaydını yazdır ve o nesneyi yok et. - Hiçbir şeye çarpmazsa
Misskaydı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.
}
}
}
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
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 Duvar3Tetikleyiciler
Tetikleyici ÇarpıştırıcılarOnTriggerEnterToplanabilir NesnelerÖlüm BölgeleriGiriş ve ÇıkışÖzet: Anahtar ve Kapı6Işın Atışları
Physics.RaycastRaycastHitIşınla Zemin KontrolüKatmanlar ve LayerMaskGörüş HattıOverlapSphere ve SphereCastTekrar: Lazerli Alarm Teli