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

Unity Physics2D.Linecast() Metodu ile Çarpışma Algılama

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

Unity oyun motorunda fizik tabanlı oyunlar geliştirirken, nesnelerin birbirleriyle olan etkileşimlerini doğru bir şekilde algılamak oldukça önemlidir. Physics2D.Linecast() metodu, iki nokta arasında çizgisel bir çarpışma kontrolü yaparak bu ihtiyacı karşılar. Bu makalede, Physics2D.Linecast() metodunu detaylı olarak inceleyeceğiz ve çeşitli örneklerle kullanımını açıklayacağız.

Physics2D.Linecast() Metodu Nedir?


Physics2D.Linecast(), belirtilen iki nokta arasında bir ışın gönderir ve bu ışının yolunda bulunan herhangi bir 2D Collider ile çarpışıp çarpmadığını kontrol eder. Eğer bir çarpışma tespit edilirse, çarpışan Collider'a ait bilgiler döndürülür. Aksi takdirde, çarpışma olmadığını gösteren bir değer döndürülür.

Parametreler



  • start: Işının başlayacağı noktayı temsil eden bir Vector2 değeri.

  • end: Işının sonlanacağı noktayı temsil eden bir Vector2 değeri.

  • layerMask (Optional): Hangi layer'lardaki Collider'larla çarpışma kontrolü yapılacağını belirten bir katman maskesi. Varsayılan olarak tüm layer'lar kontrol edilir.

  • queryTriggerInteraction (Optional): Trigger Collider'larla nasıl etkileşim kurulacağını belirtir. QueryTriggerInteraction.Collide (varsayılan) trigger'larla çarpışmayı algılar, QueryTriggerInteraction.Ignore ise görmezden gelir.


Dönüş Değeri


Physics2D.Linecast() metodu, RaycastHit2D yapısını döndürür. Bu yapı, çarpışma olup olmadığını ve çarpışma durumunda ilgili bilgileri içerir. RaycastHit2D.collider özelliği, çarpışan Collider'ı, RaycastHit2D.point özelliği ise çarpışma noktasını temsil eder. Çarpışma olmazsa, RaycastHit2D.collider değeri null olur.

Örnek Kullanım


Aşağıdaki örnek kod, iki nokta arasında bir Linecast yapar ve çarpışma olup olmadığını kontrol eder:
using UnityEngine;

public class LinecastExample : MonoBehaviour
{
public Transform startPoint;
public Transform endPoint;

void Update()
{
RaycastHit2D hit = Physics2D.Linecast(startPoint.position, endPoint.position);

if (hit.collider != null)
{
Debug.Log("Çarpışma tespit edildi! Çarpışan nesne: " + hit.collider.name);
Debug.DrawLine(startPoint.position, hit.point, Color.red);
}
else
{
Debug.Log("Çarpışma yok.");
Debug.DrawLine(startPoint.position, endPoint.position, Color.green);
}
}
}


Bu kodda, startPoint ve endPoint değişkenleri, ışının başlayacağı ve biteceği noktaları temsil eden Transform bileşenlerine atanmalıdır. Kod, her karede Linecast işlemini gerçekleştirir ve çarpışma durumuna göre farklı bir Debug.Log mesajı yazdırır. Ayrıca, çarpışma durumunu görselleştirmek için Debug.DrawLine metodu kullanılır.

Layer Mask Kullanımı


Bazı durumlarda, sadece belirli layer'lardaki Collider'larla çarpışma kontrolü yapmak isteyebilirsiniz. Bunun için layerMask parametresini kullanabilirsiniz.
int layerMask = LayerMask.GetMask("Obstacles"); // Sadece "Obstacles" layer'ındaki nesnelerle çarpışma kontrolü yapar
RaycastHit2D hit = Physics2D.Linecast(startPoint.position, endPoint.position, layerMask);

Bu örnekte, sadece "Obstacles" adlı layer'daki Collider'larla çarpışma kontrolü yapılır. Diğer layer'lardaki Collider'lar göz ardı edilir.

Trigger Collider'lar ile Etkileşim


queryTriggerInteraction parametresi, Trigger Collider'larla nasıl etkileşim kurulacağını kontrol eder. Varsayılan olarak, Trigger Collider'lar da çarpışma tespiti için kullanılır. Eğer Trigger Collider'larla çarpışma tespiti istemiyorsanız, QueryTriggerInteraction.Ignore değerini kullanabilirsiniz.
RaycastHit2D hit = Physics2D.Linecast(startPoint.position, endPoint.position, layerMask, QueryTriggerInteraction.Ignore);

Sonuç


Physics2D.Linecast() metodu, Unity'de 2 boyutlu çarpışma algılama için güçlü ve kullanışlı bir araçtır. Bu metodu kullanarak oyunlarınızda daha gelişmiş ve gerçekçi fizik tabanlı etkileşimler oluşturabilirsiniz. Layer maskesi ve Trigger Collider ayarları ile kontrolü daha da hassaslaştırabilirsiniz.

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