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 herFixedUpdate()ç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ğinintrueolarak ayarlanması gerekir. Aktif birRigidbody2D‘ye sahip nesnelerde bu özellik önemlidir.OnTriggerStay2D()metodu, sadeceCollider2D‘ler arasında çalışır.CollideryerineRigidbodykullanıyorsanız,OnCollisionStay2D()metodunu kullanmalısınız.- Performans optimizasyonu için, gereksiz yere çok sayıda
Collider2Dkullanmaktan 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.




