En temel seviyede, ışın izleme, belirli bir yönde ve tanımlı bir uzunlukta Vector3 noktasından görünmez bir ışın göndermektir. Işın atıldıktan sonra, ışının bir BasePart veya Terrain hücresine çarpıp çarpmadığını tespit edebilirsiniz.
Vector3 kökeninden Vector3 yönünde ışın atmak için WorldRoot:Raycast() yöntemini (Workspace:Raycast()) kullanabilirsiniz.
Temel Işın İzlemelocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.new(0, 0, 0)local rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Uygun olduğunda, bilinen bir kök ve hedef kullanarak bilinmeyen bir yön vektörünü (rayDirection) hesaplayabilirsiniz. Bu, iki nokta arasında ışın atarken yararlıdır; örneğin, bir oyuncu karakterinden diğerine.
Kök ve yön vektörü, ışının hedefine işaret eder:
Eşitliğin her iki tarafından çıkarın:
Işının yönü, hedeften kökün çıkarılmasıyla elde edilir:
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Filtre seçenekleri
WorldRoot:Raycast() belirli BaseParts'ları kapsayıcı olarak dahil etmek veya hariç tutmak için, Terrain içindeki Su materyalini yok saymak veya bir çarpışma grubu kullanmak için isteğe bağlı RaycastParams nesnesini kabul eder.
| Anahtar | Açıklama |
|---|---|
| FilterDescendantsInstances | Raycasting adaylarını filtrelemek için kullanılan nesnelerin Array'si. |
| FilterType | Enum.RaycastFilterType enumerasyonu, FilterDescendantsInstances dizisinin raycast işlemi sırasında nasıl kullanılacağını belirler. |
| IgnoreWater | Boolean türünde, raycasting sırasında Su materyalinin dikkate alınıp alınmayacağını belirler. |
| CollisionGroup | Raycasting işlemi için kullanılan çarpışma grubunun adıdır. |
Işın İzleme Filtrelemelocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastParams = RaycastParams.new()raycastParams.FilterDescendantsInstances = {script.Parent}raycastParams.FilterType = Enum.RaycastFilterType.ExcluderaycastParams.IgnoreWater = truelocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection, raycastParams)
Çarpışma tespiti
Eğer ışın izleme işlemi geçerli bir BasePart veya Terrain hücresine çarparsa, sonuçları içeren bir RaycastResult nesnesi döner. Bir çarpışmanın olup olmadığını test etmek için, sonucun nil olmadığını doğrulayın ve gerektiğinde aşağıdaki özellikleri kullanın.
| Özellik | Açıklama |
|---|---|
| Instance | Işının kesiştiği BasePart veya Terrain hücresidir. |
| Position | Işın ile Instance arasındaki kesişim noktasının Vector3 konumudur. |
| Distance | Işın kökü ile kesişim noktası arasındaki mesafedir. |
| Material | Kesişim noktasındaki BasePart veya Terrain'in Enum.Material'dır. |
| Normal | Kesişen yüzeyin normal vektörünün Vector3'üdür. |
Işın İzleme Çarpışma Tespitilocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("Instance:", raycastResult.Instance)print("Position:", raycastResult.Position)print("Distance:", raycastResult.Distance)print("Material:", raycastResult.Material)print("Normal:", raycastResult.Normal)elsewarn("Raycast sonucu yok!")end