Unity Collider2D ile Obje Etkileşimleri
Merhaba. Bu dersimizde sizlere colliderlar ile obje etkileşimlerini anlatacağım. Bu objemiz daha çok birçok oyunda rastladığımız; Bir objenin üzerine geldiğimizde, bir objeden ayrıldığımızda, üzerinde durduğumuzda, obje ile etkileşime girmek istediğimizde kullandığımız bir üst sınıftır. Şimdi Collider’ı tanıyalım ve örneklerini inceleyelim.
OnCollisionEnter2D
OnCollisionEnter2D
metodu, bir Collider2D
‘nin başka bir Collider2D
ile çarpıştığında tetiklenir. Bu metod, 2D fizik sisteminin bir parçasıdır ve 2D oyunlarda çarpışma olayları için kullanılır. Örneğin;
void OnCollisionEnter2D(Collision2D collision)
{
// Eğer çarpışan obje "Duvar" ise
if (collision.gameObject.CompareTag("Duvar"))
{
Debug.Log("Duvara çarptı!");
}
}
Başka bir örnek ise bir düşmanımız var diyelim. Bu düşmana hasar vermek istedik. Bunu yapmak için;
using UnityEngine;
public class Example : MonoBehaviour
{
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Dusman"))
{
collision.gameObject.SendMessage("Hasar", 10);
}
}
}
OnCollisionEnter2D
: Bu metod, çarpışma meydana geldiğinde tetiklenir. 2D fizik çarpışmalarında bu metod kullanılır.
collision.gameObject.CompareTag("Dusman")
: Bu kod satırımız ise, çarpışan nesnenin etiketinin “Dusman” olup olmadığını kontrol eder. Eğer çarpışan nesne bu etikete sahipse, o zaman hasar mesajını gönderir.
collision.gameObject.SendMessage("Hasar", 10)
: Buradaki kodumuz ise, çarpışan nesneye (“Dusman” etiketi taşıyan nesneye) SendMessage
metodunu kullanarak “Hasar” adlı bir metodçağırır. Bu metod 10 parametresini alır. Yani, çarpışan “Dusman” objesi üzerinde bir Hasar
metodu bulunmalı ve bu metod10 değeriyle çalışacak şekilde yazılmalıdır. Örneğin:
public void Hasar(int damage)
{
// Dusman'a verilen hasar
health -= damage; // health, dusmanın sağlığıdır
Debug.Log("Dusman hasar aldı: " + damage);
}
OnCollisionExit2D Metodu
OnCollisionExit2D, Unity’deki bir 2D fizik çarpışma olayını işleyen bir yöntemdir. Bu metod, bir Collider2D’nin başka bir Collider2D ile çarpışması sona erdiğinde (yani çarpışma “bittiğinde”) tetiklenir. Örneğin;
using UnityEngine;
public class Example : MonoBehaviour
{
void OnCollisionExit2D(Collision2D collision)
{
// Çarpışma sona erdiğinde düşman etiketi taşıyan nesne ile bir işlem yapalım
if (collision.gameObject.CompareTag("Dusman"))
{
Debug.Log("Dusmanla çarpışma sona erdi!");
}
}
}
OnCollisionStay2D Metodu
Bu metodumuz ise 2 tane Collider2D birbirine temas ettiğinde sürekli olarak çalışır. Yani, nesnelerimiz birbirleri ile çarpıştıklarında metodumuz her frame’de sürekli çalışacaktır. Örneğin;
using UnityEngine;
public class Example : MonoBehaviour
{
float sarjOrani= 10.0f;
float bataryaSeviyesi;
void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.tag == "sarjAlani")
{
bataryaSeviyesi= Mathf.Min(bataryaSeviyesi+ sarjOrani* Time.deltaTime, 100.0f);
}
}
}
Örneğimiz, bir şarj istasyonu objemizle temas ettiğimiz zaman, temasta bulunduğumuz süre boyunca şarjımızı +10 seviyesinde artıracaktır.
OnTriggerEnter2D Metodu
OnTriggerEnter2D, 2D oyunlarda kullanılan bir olay metodudur. Bu metod, bir Collider2D’nin bir “Trigger” alanına girdiğinde tetiklenir.
“Trigger”, çarpışma olaylarının fiziksel etkileşim yaratmadan, yalnızca alan giriş ve çıkışları ile çalışmasına olanak tanır. OnTriggerEnter2D metodu ise, bir nesne ile bir trigger alanına girdiğinde tetiklenir ve genellikle oyuncunun belirli bir bölgeye girmesi veya bir nesneyle etkileşime girmesi için kullanılır. Örneğin;
using UnityEngine;
public class PowerUp : MonoBehaviour
{
void OnTriggerEnter2D(Collider2D other)
{
// Eğer trigger alanına giren nesne oyuncu ise
if (other.CompareTag("Player"))
{
// Güç artışı işlemi
Debug.Log("Güç Artışı Alındı!");
// Burada oyuncunun gücünü artırma işlemi yapılabilir
other.gameObject.SendMessage("PowerUp"); // Oyuncuya güç artışı mesajı gönder
}
}
}
OnTriggerExit2D Metodu
OnTriggerExit2D, Unity’deki bir 2D fizik olay metodudur. Bir nesne ile bir “Trigger” alanından teması bıraktığınızda tetiklenir. Bu metod, özellikle bir nesne trigger alanından ayrıldığında yapılması gereken işlemleri yönetmek için kullanılır. “Trigger” alanları, çarpışma fiziksel etkileşimi yaratmadan, sadece alan giriş ve çıkışlarını kontrol eder. Örneğin;
using UnityEngine;
public class Example : MonoBehaviour
{
bool characterInQuicksand; //Karakterin bataklıkta olup olmadığını kontrol eden bool değişkeni
void OnTriggerExit2D(Collider2D other)
{
characterInQuicksand = false; //Karakter bataklıktan çıktığında değişkeni false yapıyoruz
}
}
Bu örneğimizde ise karakterimiz bir bataklığa girip girmediğini kontrol etmemize yarıyor.
OnTriggerStay2D Metodu
Unity’de eğer bir nesne, Trigger olarak ayarlanmış bir alanla sürekli olarak çakışmaya devam ettiğinde her frame’de tetiklenir. Bu metod, nesneler bir trigger alanı içinde kaldıkça sürekli olarak çalışır. Yani, bir nesne trigger alanına girdikten sonra bu alan içinde kaldığı sürece, her frame’de bu metod tekrar ve tekrar çağrılır. Örneğin;
using UnityEngine;
public class Example : MonoBehaviour
{
bool characterInQuicksand = false; //Karakterin bataklıkta olup olmadığını kontrol eden değişken
void OnTriggerStay2D(Collider2D collider)
{
// Collider'a bağlı olan Rigidbody2D bileşenine kuvvet uygulamak için kullanılır.
collider.attachedRigidbody.AddForce(-0.1f * collider.attachedRigidbody.velocity);
}
}
Kaynak: