Pada levelpaling dasar, raycasting adalah tindakan mengirimkan sinar tak terlihat dari titik Vector3 tertentu dengan panjang yang ditentukan.Setelah dilemparkan, Anda dapat mendeteksi apakah sinar itu mengenai sel BasePart atau Terrain .
Anda dapat melemparkan sinar dengan metode WorldRoot:Raycast() ( Workspace:Raycast() ) dari asal Vector3 dari arah Vector3 .
Layar Dasar Raycast
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)
Saat berlaku, Anda dapat menghitung vektor arah yang tidak diketahui ( ) menggunakan asal yang dikenal dan tujuan .Ini berguna saat melemparkan sinar antara dua titik yang dapat berubah, seperti dari satu karakter pemain ke yang lain.
Asal ditambah vektor arah menunjukkan tujuan sinar:
asal ray + arah ray = tujuan ray
Kurangi rayOrigin dari kedua sisi persamaan:
rayOrigin + arah ray − rayOrigin = tujuan ray − rayOrigin
Arah sinar sama dengan tujuan minus asal:
arah sinar = tujuan sinar − asal sinar
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Pilih opsi filter
WorldRoot:Raycast() menerima objek opsional RaycastParams yang memberi tahu raycast untuk secara selektif memasukkan atau mengecualikan khusus BaseParts , mengabaikan materi Air untuk Terrain , atau menggunakan kelompok kolisi .
Kunci | Deskripsi |
---|---|
FilterDescendantsInstances | Array dari objek yang keturunannya digunakan dalam pencarian kandidat raycasting filtering. |
FilterType | Enum.RaycastFilterType 枚列 yang menentukan bagaimana array FilterDescendantsInstances digunakan dalam operasi raycast. |
IgnoreWater | Boolean yang menentukan apakah material Air dianggap ketika melakukan raycasting terhadap Terrain . |
CollisionGroup | Nama string dari kelompok kolisi digunakan untuk operasi raycasting. |
Pemfilteran Raycast
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)
Deteksi serangan
Jika operasi raycasting memukul sel yang memenuhi syarat BasePart atau Terrain , objek RaycastResult dikembalikan yang berisi hasilnya.Untuk menguji untuk hit, konfirmasikan bahwa hasilnya bukan nil dan gunakan properti berikut sesuai kebutuhan.
Propinsi | Deskripsi |
---|---|
Instance | Sel BasePart atau Terrain yang dilewati oleh sinar yang bertemu. |
Position | Vector3 posisi intersepsi antara ray dan Instance . |
Distance | Jarak antara asal sinar dan titik intersepsi. |
Material | The Enum.Material dari the BasePart atau Terrain di titik intersepsi. |
Normal | Vector3 dari vektor normal dari wajah yang tersilang. |
Deteksi Pukulan Raycast
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