Tetikleyici Çarpıştırıcılar
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 15 / 63.
Is Trigger işaretli olan bir collider artık katı değildir: Rigidbody bileşenleri doğrudan içinden geçer ve Unity bunun yerine her iki nesnenin de betiklerinde OnTriggerEnter çağırarak çakışmayı bildirir. Bitiş çizgileri, toplanabilir nesneler ve tehlike bölgeleri tetikleyicidir. Kodda bu kutu, collider'ın isTrigger özelliğidir.
Bu kasanın alarm bölgesi, oyun başladığında collider'ını bir tetikleyiciye dönüştürür; bu, kutuyu işaretlemekle aynıdır ve 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 denetler. Rigidbody'si olmayan iki nesne, tetikleyici olsun ya da olmasın, birbirlerini asla bildirmez. Muhafızlar bir betikle devriye gezdiğinden, her muhafızda kinematik bir Rigidbody bulunur (Add Component, Rigidbody, Is Kinematic işaretli): yer çekimi ve çarpmalar onu etkilemez ve yine de bir Rigidbody olarak sayılır. Muhafızlarda Rigidbody olmasaydı, muhafız bölgenin içinden geçer ve Console boş kalırdı. isTrigger olmadan bölge katı bir kutudur ve kinematik bir gövde, Rigidbody'si olmayan bir collider'a asla dokunmaz; dolayısıyla yine hiçbir şey kaydedilmez. Çiftteki nesnelerden herhangi birinde bulunan tek bir Rigidbody yeterlidir. Sonraki derste, içeri giren collider olan other konusuna bakacağız.
Görev
KolayDrone, üç halkadan geçen bir rota boyunca uçmalı ve her Ring, drone içinden geçerken adını ve passed ifadesini kaydetmeli; örneğin Ring1 passed. Henüz hiçbir şey çalışmıyor: drone'un betiği onu MovePosition ile uçuruyor, ancak sahnedeki hiçbir nesnede Rigidbody yok ve halkalar katı.
Drone.csiçinde, oyun başladığında drone'a bir Rigidbody ekle ve bunubodyiçinde tut. Drone rotası boyunca aynı yükseklikte uçmalı. Drone üzerindeki tek bir gövde üç halkanın tamamını kapsar.Ring.csiçinde, oyun başladığında her halkanın collider'ını bir tetikleyici hâline getir.
Play'e basıp Console'u izle, ardından Check'e bas.
Kendin dene
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// Bu halkanın collider'ını trigger yap
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
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ı