Physics.Raycast

Deklarasyon

public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);


Parametreler

originIşının dünya koordinatlarındaki başlangıç noktası.
directionIşının yönü.
maxDistanceIşının çarpışmaları kontrol etmek için maksimum mesafesi.
layerMaskBir ışın fırlatılırken Collider'ları seçmeli olarak yoksaymak için kullanılan bir Layer mask.
queryTriggerInteractionBu sorgunun Trigger'ları vurup vurmayacağını belirtir.

Dönüş Değeri
bool Eğer ışın bir Collider ile kesişiyorsa true, aksi halde false döner.

Açıklama
Bir ışın, origin noktasından başlayarak, direction yönde, maxDistance uzunluğunda, Sahne içindeki tüm collider'larla çarpışır.

İsterseniz bir LayerMask sağlayarak, çarpışmaları üretmek istemediğiniz Collider'ları filtreleyebilirsiniz.

queryTriggerInteraction belirtilmesi, Trigger collider'larının bir çarpma oluşturup oluşturmayacağını veya global Physics.queriesHitTriggers ayarını kullanıp kullanmayacağını kontrol etmenizi sağlar.

Notlar: Raycast'ler, Raycast başlangıcı Collider içinde ise o Collider'ları algılamaz. Bu örneklerin hepsinde, Update yerine FixedUpdate kullanılmıştır. Update ve FixedUpdate arasındaki farkı anlamak ve bunların fizik sorguları ile nasıl ilişkili olduğunu görmek için Olay Fonksiyonlarının Yürütme Sırası sayfasına bakınız.

using UnityEngine;

// C# örneği.

public class ExampleClass : MonoBehaviour
{
    // Physics sorguları ile ilgili FixedUpdate() ve Update() hakkında bilgi için Olay
    // Fonksiyonlarının Yürütme Sırası sayfasına bakınız
    void FixedUpdate()
    {
        // Katmanın (8) indeksini bir bit maskesi almak için sağa kaydırın
        int layerMask = 1 << 8;

        // Bu, sadece 8. katmandaki collider'larla ışınlar atar.
        // Ancak bunun yerine, 8. katmandaki her şeyle çarpışmak istiyoruz. ~ operatörü bunu
        // yapar, bir bit maskesini tersine çevirir.
        layerMask = ~layerMask;

        RaycastHit hit;
        // Işın, oyuncu katmanını hariç tutarak herhangi bir nesneyle kesişirse
        if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward),
            out hit, Mathf.Infinity, layerMask))
        {
            Debug.DrawRay(transform.position,
            transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
            Debug.Log("Did Hit");
        }
        else
        {
            Debug.DrawRay(transform.position,
            transform.TransformDirection(Vector3.forward) * 1000, Color.white);
            Debug.Log("Did not Hit");
        }
    }
}


Bu örnek, nesnenin mevcut pozisyonundan ileriye doğru 10 birim uzanan basit bir Raycast oluşturur.

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    // Physics sorguları ile ilgili FixedUpdate() ve Update() hakkında bilgi için Olay
    // Fonksiyonlarının Yürütme Sırası sayfasına bakınız
    void FixedUpdate()
    {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);

        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
    }
}


Deklarasyon
public static bool Raycast(Vector3 originVector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask, QueryTriggerInteraction queryTriggerInteraction);

Parametreler

originIşının dünya koordinatlarındaki başlangıç noktası.
directionIşının yönü.
hitInfoEğer true dönerse, hitInfo en yakın collider'ın nerede vurulduğu hakkında daha fazla bilgi içerecektir. (Ek kaynaklar: RaycastHit).
maxDistanceIşının çarpışmaları kontrol etmek için maksimum mesafesi.
layerMaskBir ışın fırlatılırken Collider'ları seçmeli olarak yoksaymak için kullanılan bir Layer mask.
queryTriggerInteractionBu sorgunun Trigger'ları vurup vurmayacağını belirtir.

Dönüş Değeri
bool Eğer ışın bir Collider ile kesişiyorsa true, aksi halde false döner.

Açıklama
Sahnedeki tüm collider'lara karşı bir ışın fırlatır ve vurulan şeyle ilgili detaylı bilgi döndürür.

Bu örnek, mevcut nesne ile rapor edilen Collider arasındaki mesafeyi bildirir:

using UnityEngine;

public class RaycastExample : MonoBehaviour
{
    // Physics sorguları ile ilgili FixedUpdate() ve Update() hakkında bilgi için Olay
    // Fonksiyonlarının Yürütme Sırası sayfasına bakınız
    void FixedUpdate()
    {
        RaycastHit hit;

        if (Physics.Raycast(transform.position, -Vector3.up, out hit))
            print("Found an object - mesafe: " + hit.distance);
} }


Bu örnek, Ray'ı ne kadar uzağa fırlatılacağını sınırlamak için maxDistance parametresini tekrar tanıtır:

using UnityEngine;

public class RaycastExample : MonoBehaviour
{
    // Physics sorguları ile ilgili FixedUpdate() ve Update() hakkında bilgi için Olay
    // Fonksiyonlarının Yürütme Sırası sayfasına bakınız
    void FixedUpdate()
    {
        RaycastHit hit;

        if (Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0f))
            print("Found an object - mesafe: " + hit.distance);
    }
}


Deklarasyon
public static bool Raycast(Ray ray, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

Parametreler

rayIşının başlama noktası ve yönü.
maxDistanceIşının çarpışmaları kontrol etmek için maksimum mesafesi.
layerMaskBir ışın fırlatılırken Collider'ları seçmeli olarak yoksaymak için kullanılan bir Layer mask.
queryTriggerInteractionBu sorgunun Trigger'ları vurup vurmayacağını belirtir.

Dönüş Değeri
bool Eğer ışın bir Collider ile kesişiyorsa true, aksi halde false döner.

Açıklama
Yukarıdakiyle aynı, ancak origin ve direction kullanmak yerine ray.origin ve ray.direction kullanılır.

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    // Physics sorguları ile ilgili FixedUpdate() ve Update() hakkında bilgi için Olay
    // Fonksiyonlarının Yürütme Sırası sayfasına bakınız
    void FixedUpdate()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, 100))
            print("Hit something!");
    }
}


Deklarasyon
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

Parametreler
rayIşının başlama noktası ve yönü.
hitInfoEğer true dönerse, hitInfo en yakın collider'ın nerede vurulduğu hakkında daha fazla bilgi içerecektir. (Ek kaynaklar: RaycastHit).
maxDistanceIşının çarpışmaları kontrol etmek için maksimum mesafesi.
layerMaskBir ışın fırlatılırken Collider'ları seçmeli olarak yoksaymak için kullanılan bir Layer mask.
queryTriggerInteractionBu sorgunun Trigger'ları vurup vurmayacağını belirtir.

Dönüş Değeri
bool Eğer ışın bir Collider ile kesişiyorsa true, aksi halde false döner.

Açıklama
Yukarıdakiyle aynı, ancak origin ve direction kullanmak yerine ray.origin ve ray.direction kullanılır.
Bu örnek, bir çarpışma algılandığında Işın boyunca bir çizgi çizer:

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    // Physics sorguları ile ilgili FixedUpdate() ve Update() hakkında bilgi için Olay
    // Fonksiyonlarının Yürütme Sırası sayfasına bakınız
    void FixedUpdate()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 100))
            Debug.DrawLine(ray.origin, hit.point);
    }
}


Bu blog Unity Docs'un Türkçeye çevrilmiş halidir.

Yorumlar

Bu blogdaki popüler yayınlar

Important Classes - Vectors

RequireComponent

Important Classes - GameObject