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