En temel seviyesinde, ışın atışı belli bir yönde belirli bir uzunlukla görünmez bir ışın göndermek eylemidir.Bir kez atıldıktan sonra, ışın bir BasePart veya Terrain hücreye vurduğunu tespit edebilirsiniz.
Bir ışını WorldRoot:Raycast() yöntemiyle ( Workspace:Raycast() ) bir Vector3 kaynağından bir Vector3 yönünde fırlatabilirsiniz.
Temel Işın Yayımı
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)
uygulanabilir, bilinen bir kaynak ve hedef kullanarak bilinmeyen bir yönlü vektör hesaplayabilirsiniz ( ).Bu, bir ışını bir noktadan diğerine değiştirebilen iki nokta arasında atarken yararlıdır, örneğin bir oyuncu karakterinden diğerine.
Köken artı bir yönlü vektör, ışının varış noktasını gösterir:
ışınKökeni + ışınYönü = ışınHedefi
rayOrigin eşitliğin her iki tarafından çıkarın:
ışınKökeni + ışınYönü − ışınKökeni = ışınHedefi − ışınKökeni
Işının yönü, kaynağı eksik olarak hedefe eşittir:
ışın yönü = ışın hedefi − ışın kaynağı
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
isteğe bağlı bir nesnesini kabul eder, böylece ışın atışı belirli 'leri seçerek veya dışlayarak dahil edebilir veya dışlayabilir veya su grubu kullanarak bir çarpışma grubu kullanır.
Anahtar | Açıklama |
---|---|
FilterDescendantsInstances | Array nesnelerin torunlarının filtreleme raycasting adaylarında kullanıldığı nesnelerin sayısı |
FilterType | Enum.RaycastFilterType raycast işleminde FilterDescendantsInstances dizi nasıl kullanılacağını belirleyen enum. |
IgnoreWater | Su malzemesiyle ışınlama yapılırken dikkate alınıp alınmayacağını belirleyen Terrain mantığı. |
CollisionGroup | Işın atma işlemi için kullanılan çarpışma grubu adının dize adı. |
Işıncast Filtreleme
local 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)
Vuruş tespiti
Işın yayını operasyonu elverişli bir BasePart veya Terrain hücreye vurursa, sonuçları içeren bir RaycastResult nesne döndürülür.Bir vuruş için test yapmak için, sonucun nil olmadığını doğrulayın ve gerekli olan aşağıdaki özellikleri kullanın.
Özellik | Açıklama |
---|---|
Instance | Işının kesiştiği BasePart veya Terrain hücre. |
Position | Vector3 ışın ve Instance arasındaki kesişimin konumu. |
Distance | Işın kaynağı ve kesişme noktası arasındaki mesafe. |
Material | Kesişim noktasındaki Enum.Material veya BasePart veya Terrain 'in kesişim noktası. |
Normal | Vector3 kesişen yüzün normal vektörünün. |
Işın Yayını Hedef Tespiti
local 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("No raycast result!")end