Menu
CoddyTech

Physics.Raycast

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 33 / 63.

Bir ışın taraması, bir noktadan belirli bir yönde görünmez bir çizgi gönderir ve bir çarpıştırıcıya çarpıp çarpmadığını bildirir. Physics.Raycast(origin, direction, maxDistance), çizgi üzerinde maxDistance birim içinde bir çarpıştırıcı varsa true, aksi hâlde false döndürür. Bu araba, burnunun 2 birim önünden daha yakın herhangi bir şey olduğunda fren yapar:

public float brakeDistance = 2f;

void Update()
{
    if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
    {
        Debug.Log("Brake!");
    }
}

transform.forward arabayla birlikte döner, bu nedenle ışın her zaman arabanın burnunun önünü tarar; Vector3.forward ise her zaman dünyanın z ekseni boyunca işaret ederdi. Işın arabanın merkezinden, kendi çarpıştırıcısının içinden başlar ve bir ışın, içinde başladığı bir çarpıştırıcıyı hiçbir zaman bildirmez; dolayısıyla araba kendisini algılamaz. maxDistance değerini belirtmezsen ışın sonsuza kadar ilerler: araba haritanın öbür ucundaki bir duvar için fren yapardı.

Işınlar çizilenleri değil, çarpıştırıcıları algılar: Renderer bileşeni olup çarpıştırıcısı olmayan bir nesne ışınlara görünmezdir ve tetikleyici bir çarpıştırıcı isabet sayılır. Test ederken Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red), Unity'nin Scene görünümünde ışını çizer.

challenge icon

Görev

Orta

Mağaza kapısını otomatik hâle getir. DoorSensor betiği, kapı aralığının 3,5 birim üzerinde, Sensor'a yerleştirilir. Inspector'da buna door ve 3 değerinde bir reach verilir.

  • Her karede Sensor'dan dümdüz aşağıya, reach uzunluğunda bir ışın gönder.
  • Işın bir şeye çarptığı sürece kapı açık olur: SetActive(false) ile kapıyı gizle. Hiçbir şeye çarpmadığı sürece kapıyı tekrar göster.

Zemin ışının erişim mesafesinin dışında olduğundan, biri Sensor'ın altında durana kadar kapı kapalı kalır. Play'e bas ve ok tuşlarıyla Visitor'ı altına yürüt, ardından Check'e bas.

Kendin dene

using UnityEngine;

public class DoorSensor : MonoBehaviour
{
    public GameObject door;
    public float reach = 3f;

    void Update()
    {
        // Sensor'dan aşağıya doğru uzanan ışın bir şeye çarptığı sürece kapıyı aç.
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Fizik ve Oynanış bölümündeki tüm dersler