Tetikleyici Çarpıştırıcılar
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 15 / 71.
Is Trigger seçeneği işaretli olan bir çarpıştırıcı artık katı değildir: Rigidbody bileşenleri içinden doğrudan geçer ve Unity bunun yerine örtüşmeyi, her iki nesnenin de betiklerinde OnTriggerEnter çağırarak bildirir. Bitiş çizgileri, toplanabilir nesneler ve tehlike bölgeleri tetikleyicidir. Kodda bu kutu, çarpıştırıcının isTrigger özelliğidir.
Bu kasanın alarm bölgesi, oyun başladığında çarpıştırıcısını tetikleyiciye dönüştürür; bu, kutuyu işaretlemekle aynı şeydir. Bir muhafız içeri girdiğinde alarmı çalar:
void Start()
{
GetComponent<Collider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
Debug.Log("Alarm!");
}Tetikleyiciler çarpışmalarla aynı kurala uyar: Unity bir nesne çiftini yalnızca iki nesneden en az birinde Rigidbody varsa kontrol eder. Rigidbody bileşeni olmayan iki nesne, birbirleri için hiçbir zaman bildirim oluşturmaz; tetikleyici olsun ya da olmasın. Muhafızlar bir betikle devriye gezer, bu yüzden her muhafızda kinematik bir Rigidbody bulunur (Add Component, Rigidbody, Is Kinematic işaretli): yer çekimi ve darbeler onu etkilemez, ancak yine de Rigidbody sayılır. Muhafızlarda Rigidbody bileşenleri olmazsa muhafız bölgenin içinden geçer ve Console boş kalır. isTrigger olmazsa bölge katı bir kutudur ve kinematik bir cisim, Rigidbody bileşeni olmayan bir çarpıştırıcıya hiçbir zaman dokunmaz; dolayısıyla yine hiçbir şey kaydedilmez. Çiftteki nesnelerden herhangi birinde tek bir Rigidbody olması yeterlidir. Sonraki derste içeri giren çarpıştırıcı olan other ele alınacak.
Görev
KolayDrone'u halkaların içinden uçur ve her halkanın onu bildirmesini sağla.
Drone.csdosyasınınStart()metodunda, düz uçması içinbody = gameObject.AddComponent<Rigidbody>();vebody.isKinematic = true;ayarlarını yap.Ring.csdosyasınınStart()metodunda,GetComponent<Collider>().isTrigger = true;ayarını yap.
“Oyna” düğmesine bas: drone içlerinden uçar ve Console'da Ring1 passed, Ring2 passed ve Ring3 passed görünür. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// Bu halkanın collider'ını bir trigger yap
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
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