Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
2D Oyun Geliştirme

Unity'de OnTriggerStay2D Metodu: Çarpışma Süresi Boyunca Etkileşimler

Paylaşan: Unity Eğitim 15 September 2025 4 dakika okuma 154 görüntülenme

Merhaba Unity geliştiricileri! Bu yazıda, Unity oyun motorunda 2 boyutlu oyun geliştirme sürecinde sıklıkla kullanılan ve oldukça güçlü bir fonksiyon olan OnTriggerStay2D() metodunu detaylı bir şekilde inceleyeceğiz. Bu metod, iki 2D Collider'ın birbirleri ile temas halinde kaldıkları süre boyunca sürekli olarak tetiklenir ve bu sayede oyun mekaniklerinizde dinamik ve sürekli etkileşimler oluşturabilirsiniz.

OnTriggerStay2D() Metodunun Temelleri


OnTriggerStay2D() metodu, bir Collider2D'ye sahip oyun nesnenizin, başka bir Collider2D'ye sahip oyun nesnesi ile temas halinde kaldığı sürece her FixedUpdate() çağrısında çalıştırılır. Bu, sürekli bir etkileşim sağlamak için idealdir. Örneğin, bir oyuncu karakterinin bir platform üzerinde durduğu süre boyunca sürekli olarak yerçekimini etkisiz hale getirmek veya bir düşmanın oyuncu ile temas ettiği sürece hasar vermesi gibi durumlar için kullanılabilir.

OnTriggerEnter2D(), OnTriggerExit2D() ve OnTriggerStay2D() Arasındaki Farklar


Bu üç metod, 2D çarpışma tespiti için kullanılır ancak tetiklenme zamanlamaları farklıdır:

  • OnTriggerEnter2D(): İki Collider2D ilk temas ettiğinde bir kere tetiklenir.

  • OnTriggerExit2D(): İki Collider2D temasını kestiğinde bir kere tetiklenir.

  • OnTriggerStay2D(): İki Collider2D temas halinde kaldığı sürece her FixedUpdate() çağrısında tetiklenir.


Bu farklılıkları anlamak, doğru metodu seçmek ve oyun mekaniklerinizi doğru şekilde tasarlamak için oldukça önemlidir.

OnTriggerStay2D() Kullanım Örneği: Sürekli Hasar Verme


Bir düşmanın oyuncu ile temas ettiği sürece sürekli hasar vermesi için OnTriggerStay2D()'yi nasıl kullanabileceğimize bakalım. Aşağıdaki C# kodunda, Enemy isimli bir sınıfımız var ve bu sınıfın OnTriggerStay2D() metodu, temas halinde olduğu Collider2D'nin tag'ini kontrol ediyor. Eğer temas halinde olduğu Collider2D'nin tag'i "Player" ise, oyuncuya her FixedUpdate() çağrısında hasar veriyor:

using UnityEngine;

public class Enemy : MonoBehaviour
{
public float damage = 10f;

private void OnTriggerStay2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
// Oyuncuya hasar ver
other.GetComponent<PlayerHealth>().TakeDamage(damage);
}
}
}


Bu örnekte, PlayerHealth isimli bir script, oyuncunun can değerini yönetiyor ve TakeDamage() metodu ile hasar alıyor. Bu scriptin nasıl yazılacağına dair bir örnek aşağıdadır:

using UnityEngine;

public class PlayerHealth : MonoBehaviour
{
public float health = 100f;

public void TakeDamage(float damage)
{
health -= damage;
Debug.Log("Player hasarı aldı! Kalan can: " + health);
if (health <= 0)
{
Die();
}
}

void Die()
{
Debug.Log("Oyuncu öldü!");
// Oyuncu ölüm animasyonu veya başka işlemler burada eklenebilir
}
}


OnTriggerStay2D() Kullanım Örneği: Platform Hareketi


Oyuncu bir platform üzerinde durduğu sürece platformun hareket etmesini sağlamak için de OnTriggerStay2D() kullanabiliriz. Bu senaryoda, platformun OnTriggerStay2D() metodu, oyuncu platform üzerinde olduğu sürece platformu hareket ettirir.

 

Önemli Notlar



  • IsTrigger özelliğinin true olarak ayarlanması gerekir. Aktif bir Rigidbody2D'ye sahip nesnelerde bu özellik önemlidir.

  • OnTriggerStay2D() metodu, sadece Collider2D'ler arasında çalışır. Collider yerine Rigidbody kullanıyorsanız, OnCollisionStay2D() metodunu kullanmalısınız.

  • Performans optimizasyonu için, gereksiz yere çok sayıda Collider2D kullanmaktan kaçının.


Sonuç


OnTriggerStay2D() metodu, Unity'de sürekli çarpışma tespiti gerektiren oyun mekanikleri oluşturmak için güçlü bir araçtır. Bu yazıda ele aldığımız örnekler, bu metodun nasıl kullanılabileceğine dair temel bir anlayış sağlamayı amaçlamaktadır. Daha karmaşık oyun mekanikleri oluştururken, bu metodun özelliklerini ve sınırlamalarını dikkate almanız önemlidir.

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!