Işın İzleme

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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.

Süzülen küreler tarafından lazerler ateşlenir ve ışın izleme, bir lazerin bir platforma çarpıp çarpmadığını belirler. Lazerler tarafından dokunulan platformlar geçici olarak yok edilir.

Vector3 kökeninden Vector3 yönünde ışın atmak için WorldRoot:Raycast() yöntemini (Workspace:Raycast()) kullanabilirsiniz.

Temel Işın İzleme

local 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.

  1. Kök ve yön vektörü, ışının hedefine işaret eder:

    rayOrigin+rayDirection=rayDestination\text{rayOrigin} + \text{rayDirection} = \text{rayDestination}

  2. Eşitliğin her iki tarafından rayOrigin\text{rayOrigin} çıkarın:

    rayOrigin+rayDirectionrayOrigin=rayDestinationrayOrigin\text{rayOrigin} + \text{rayDirection} - \text{rayOrigin} = \text{rayDestination} - \text{rayOrigin}

  3. Işının yönü, hedeften kökün çıkarılmasıyla elde edilir:

    rayDirection=rayDestinationrayOrigin\text{rayDirection} = \text{rayDestination} - \text{rayOrigin}


local Workspace = game:GetService("Workspace")
local rayOrigin = Workspace.TestOrigin.Position
local rayDestination = Workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local 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.

AnahtarAçıklama
FilterDescendantsInstancesRaycasting adaylarını filtrelemek için kullanılan nesnelerin Array'si.
FilterTypeEnum.RaycastFilterType enumerasyonu, FilterDescendantsInstances dizisinin raycast işlemi sırasında nasıl kullanılacağını belirler.
  • Exclude — Her BasePart, dizideki nesnelerin alt nesneleri hariç tutulmak üzere değerlendirilir.
  • Include — Yalnızca dizideki nesnelerin alt nesneleri olan BaseParts dikkate alınır.
IgnoreWaterBoolean türünde, raycasting sırasında Su materyalinin dikkate alınıp alınmayacağını belirler.
CollisionGroupRaycasting işlemi için kullanılan çarpışma grubunun adıdır.
Işın İzleme Filtreleme

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {script.Parent}
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
raycastParams.IgnoreWater = true
local 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.

ÖzellikAçıklama
InstanceIşının kesiştiği BasePart veya Terrain hücresidir.
PositionIşın ile Instance arasındaki kesişim noktasının Vector3 konumudur.
DistanceIşın kökü ile kesişim noktası arasındaki mesafedir.
MaterialKesişim noktasındaki BasePart veya Terrain'in Enum.Material'dır.
NormalKesişen yüzeyin normal vektörünün Vector3'üdür.
Işın İzleme Çarpışma Tespiti

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
if raycastResult then
print("Instance:", raycastResult.Instance)
print("Position:", raycastResult.Position)
print("Distance:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("Raycast sonucu yok!")
end
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.