Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity OnCollisionStay() Metodu ile Sürekli Çarpışma Algılama

Paylaşan: Unity Eğitim 12 September 2025 3 dakika okuma 107 görüntülenme

Unity oyun motorunda, oyun nesnelerinin birbirleriyle etkileşimini yönetmek için çeşitli fiziksel olaylar kullanılır. Bu olaylardan biri de OnCollisionStay() metodudur. Bu metot, iki veya daha fazla Collider'a sahip oyun nesnesi birbirine temas halinde kaldığı sürece sürekli olarak çağrılır. Bu, nesneler arasındaki çarpışmanın süresi boyunca sürekli bir etkileşim sağlamamızı sağlar.

OnCollisionStay() Metodunun Kullanımı


OnCollisionStay() metodu, MonoBehaviour sınıfından türetilen bir script içerisinde tanımlanır. Bu metot, bir Collision nesnesi alır. Bu nesne, çarpışan nesneler hakkında bilgi içerir. Örneğin, çarpışan diğer oyun nesnesine, temas noktasına ve çarpışma kuvvetine erişebilirsiniz.
using UnityEngine;

public class CollisionStayExample : MonoBehaviour
{
void OnCollisionStay(Collision collision)
{
// Çarpışma devam ederken yapılacak işlemler buraya yazılır.
Debug.Log("Çarpışma devam ediyor: " + collision.gameObject.name);
}
}


Collision Nesnesi Özellikleri


Collision nesnesi, çarpışma hakkında birçok yararlı bilgi sunar. En yaygın kullanılan özellikleri şunlardır:

  • gameObject: Çarpışmaya giren diğer GameObject'i döndürür.

  • contacts: Çarpışma noktaları dizisini içerir. Her ContactPoint, temas noktası, normal ve diğer bilgiler içerir.

  • relativeVelocity: İki GameObject arasındaki göreli hızı döndürür.


Örnek Senaryolar


OnCollisionStay() metodu, çeşitli oyun mekanikleri için kullanılabilir. İşte bazı örnekler:

1. Sürekli Kuvvet Uygulama


Bir nesne başka bir nesneyle temas halindeyken sürekli bir kuvvet uygulamak için OnCollisionStay() kullanılabilir. Örneğin, bir itme kuvveti uygulamak veya bir nesneyi sürekli olarak sürükleyebilirsiniz.
void OnCollisionStay(Collision collision)
{
Rigidbody rb = collision.gameObject.GetComponent<Rigidbody>();
if (rb != null)
{
rb.AddForce(transform.forward * 10f);
}
}

2. Zamanla Değişen Etkiler


Çarpışmanın süresi boyunca zamanla değişen etkiler yaratabilirsiniz. Örneğin, temas süresi arttıkça kuvvetin artması veya azalması gibi.
float contactTime = 0f;
void OnCollisionStay(Collision collision)
{
contactTime += Time.deltaTime;
Debug.Log("Temas Süresi: " + contactTime);
// contactTime değişkenini kullanarak kuvvet veya diğer etkileri ayarlayın
}

3. Karakter Kontrolü


Bir platform oyununda, karakterin bir platforma temas halinde kaldığı sürece platforma yapışmasını sağlamak için OnCollisionStay() kullanılabilir.
void OnCollisionStay(Collision collision)
{
// Karakterin platforma yapışması için gerekli işlemler burada yapılır.
}

OnCollisionEnter() ve OnCollisionExit() ile Birlikte Kullanım


OnCollisionStay(), genellikle OnCollisionEnter() (çarpışma başladığında) ve OnCollisionExit() (çarpışma bittiğinde) metotlarıyla birlikte kullanılır. OnCollisionEnter() metodu, çarpışmanın başlangıcında bir kez çağrılırken, OnCollisionExit() metodu, çarpışmanın sonlandığında bir kez çağrılır. Bu üç metot bir arada kullanılarak, çarpışmanın tüm aşamalarını yönetmek mümkün olur.

Örneğin, bir nesne başka bir nesneyle çarpışmaya başladığında bir ses efekti çalabilir, çarpışma devam ederken sürekli bir kuvvet uygulayabilir ve çarpışma bittiğinde sesi durdurabilirsiniz.

Önemli Notlar


OnCollisionStay() metodu, her karede çağrıldığından, performans üzerinde etkisi olabilir. Özellikle çok sayıda çarpışma varsa, performans sorunları yaşanabilir. Bu nedenle, bu metodun içinde yapılan işlemlerin mümkün olduğunca optimize edilmesi önemlidir.

Ayrıca, Collider'ların doğru şekilde ayarlanması da önemlidir. Yanlış ayarlanmış Collider'lar, beklenmedik davranışlara yol açabilir.

Bu makalede, OnCollisionStay() metodunun temel kullanımını ve bazı örnek senaryolarını ele aldık. Daha detaylı bilgi için Unity dokümantasyonuna bakabilirsiniz.

 

🧠 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!