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

Unity'de OnControllerColliderHit() Metodu ile Karakter Controller Çarpışmaları

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

Unity oyun motorunda karakter kontrolcüsü (Character Controller) kullanarak oyun geliştirmek, oyunun temel mekaniklerini oluşturmanın önemli bir parçasıdır. Karakter kontrolcüsü, oyun dünyasında karakterin hareketini ve çevreyle etkileşimini yönetir. Bu etkileşimlerin en önemlilerinden biri de çarpışmalardır. Karakterin diğer oyun nesneleriyle veya oyun dünyasının sınırlarıyla çarpışması durumunda, istenilen davranışları tetiklemek için OnControllerColliderHit() metodu kullanılır.

OnControllerColliderHit() Metodu Nedir?


OnControllerColliderHit(), Unity'nin MonoBehaviour sınıfından türetilen bir metottur. Bu metod, karakter kontrolcüsünün bir collider'a çarptığı anda otomatik olarak çağrılır. Metodun parametreleri, çarpışma hakkında detaylı bilgi sağlar, bu sayede çarpışmaya özel tepkiler verebilirsiniz.

OnControllerColliderHit() Metodunun Parametreleri


OnControllerColliderHit() metodu, aşağıdaki parametreleri alır:

  • Collision collision: Çarpışma hakkında detaylı bilgi içeren bir Collision nesnesi. Bu nesne, çarpışan collider'lar, çarpışma noktası, çarpışma normal vektörü gibi bilgileri sağlar.


OnControllerColliderHit() Metodunun Kullanımı


OnControllerColliderHit() metodunu kullanarak, karakterin çarpıştığı nesneye, çarpışma noktasına ve yönüne göre farklı tepkiler verebilirsiniz. Örneğin, karakter bir duvara çarptığında zıplamasını veya bir düşmana çarptığında hasar almasını sağlayabilirsiniz.

Örnek Senaryo: Duvar Tırmanma


Diyelim ki, oyununuzda karakterin duvarlara tırmanmasını istiyorsunuz. Karakter bir duvara çarptığında, eğer belirli bir açıyla çarptıysa, tırmanma animasyonunu başlatabilir ve karakteri duvara yapıştırabilirsiniz. Bunun için OnControllerColliderHit() metodundaki collision.contacts dizisini kullanarak çarpışma noktasını ve normal vektörünü kontrol edebilirsiniz.

using UnityEngine;

public class CharacterControllerClimb : MonoBehaviour
{
private CharacterController controller;

void Start()
{
controller = GetComponent<CharacterController>();
}

void OnControllerColliderHit(Collision collision)
{
foreach (ContactPoint contact in collision.contacts)
{
if (Vector3.Angle(contact.normal, Vector3.up) < 30)
{
// Duvara tırmanma işlemleri
Debug.Log("Duvara tırmanılıyor!");
}
}
}
}


Bu örnekte, Vector3.Angle() fonksiyonu, çarpışma normal vektörü ile yukarı yönü arasındaki açıyı hesaplar. Eğer açı 30 dereceden küçükse, karakterin duvara tırmanabileceği varsayılır ve "Duvara tırmanılıyor!" mesajı konsola yazdırılır. Gerçek bir duvar tırmanma mekaniği için, buraya karakterin pozisyonunu ve hareketini güncelleyecek kod eklenmelidir.

Örnek Senaryo: Düşmanla Çarpışma


Karakterin düşmanlarla çarpışması durumunda, düşmana hasar vermek veya karakterin hasar almasını sağlamak için OnControllerColliderHit() metodunu kullanabilirsiniz. Çarpışan nesnenin tag'ini kontrol ederek, düşman nesneleriyle çarpışmaları diğer nesnelerden ayırabilirsiniz.

using UnityEngine;

public class CharacterControllerCombat : MonoBehaviour
{
void OnControllerColliderHit(Collision collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
// Düşmana hasar verme veya karakterin hasar alması işlemleri
Debug.Log("Düşmanla çarpışma!");
}
}
}


Bu örnekte, eğer çarpışan nesnenin tag'i "Enemy" ise, "Düşmanla çarpışma!" mesajı konsola yazdırılır. Buraya, düşman ve karakterin sağlık değerlerini güncelleyecek kod eklenmelidir.

Dikkat Edilmesi Gereken Noktalar


OnControllerColliderHit() metodu, her çarpışma için çağrıldığı için performans açısından dikkatli olunmalıdır. Çok sayıda çarpışma durumunda, metodun içindeki işlemler performans sorunlarına yol açabilir. Bu nedenle, gereksiz işlemlerden kaçınılmalı ve performans iyileştirme teknikleri kullanılmalıdır.

Ayrıca, OnControllerColliderHit() metodu, yalnızca CharacterController bileşeni olan oyun nesnelerinde çalışır. Diğer collider'lar için farklı çarpışma algılama metodları kullanılmalıdır.

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