Rehber Unity Raycast nedir, nasıl kullanılır?

Syntax

Üstün
Katılım
11 Şubat 2024
Mesajlar
1.835
Çözümler
10
Beğeniler
1.843
Raycast nedir?
Raycast, bir noktadan başlayıp doğrusal giden bir ışın denebilir.

Raycast ne işe yarar?
Kullandığımız ışın ile hangi nesneye çarptığımızı öğrenebiliriz. Bununla etkileşim sistemi yapabiliriz. Mesela oyuncunun gözünden çıkan raycast (ışın) kapıya çarparsa "E" tuşuna basarak kapıyı açabilmek. Veya ışın NPC'ye çarpıyorsa onunla etkileşime girmek için gibi. Raycasti silah sisteminde de kullanabiliriz. Eğer gönderdiğimiz ışın düşmana çarpıyorsa hasar verebilir gibi.

Raycast ile nesne hakkında bilgi alma
Bir raycast oluşturup, raycastin çarptığı nesnenin ne olduğu ve bize ne kadar uzakta olduğu hakkında bilgi veren bir örnek göstereyim.

C#:
using UnityEngine;

public class PlayerRaycast : MonoBehaviour
{

 public float raycastMesafe = 10f;
 public LayerMask raycastLayer = -1; // -1 tüm katmanları dahil eder.

 void Update()
 {
 // Oyuncunun olduğu konumdan ışın göndermekye yarıyor.
 Vector3 baslangicNoktasi = transform.position; //oyuncunun konumu.
 Vector3 yon = transform.forward; // Oyuncunun baktığı yön.

 // Raycast gönderiyoruz.
 RaycastHit hit;
 if (Physics.Raycast(baslangicNoktasi, yon, out hit, raycastMesafe, raycastLayer))
 {
 // Bir nesneye çarparsak o nesnenin adı konsolda yazacak.
 Debug.Log("Tespit edilen nesne: " + hit.collider.name);

 // Mesafe bilgisini de bu kısım ile öğreniyoruz.
 float mesafe = Vector3.Distance(baslangicNoktasi, hit.point);
 Debug.Log("Mesafe: " + mesafe.ToString("F2") + " metre"); //ToString float değerini stringe dönüştürmeye yarıyor.

 // Editörde raycastin çarpıp çarpmadığını anlamamızda yardımcı oluyor. Kırmızı ise çarpıyor demek.
 Debug.DrawRay(baslangicNoktasi, yon * hit.distance, Color.red);
 }
 else
 {
 // Hiçbir şeye çarpmadıysa yeşil yanıyor.
 Debug.DrawRay(baslangicNoktasi, yon * raycastMesafe, Color.green);
 }
 }
}





Oyuncunun kamerasına child olarak bir gameobject oluşturup kodu bu objeye atıyoruz. "Raycast Mesafe" değişkeni ışınımızın ne kadar uzağa gitmesini istiyorsak ona göre ayarlıyoruz. Raycast Layer'ı ise ışınımızın neleri tetiklemesi gerektiğini ayarlamak için. Mesela ben buna "Ground" layer maskini dahil etmezsem yere çarpsa bile algılamayacaktır.

Çalıştırdığımızda konsolda aşağıdaki gibi bir sonuç alacaksınız.

 
Son düzenleme:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…