Pencastan Raycasting

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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 .

Laser ditembak oleh bola mengambang, dan raycasting menentukan apakah laser mengenai platform.Platform yang disentuh oleh laser hancur sementara.

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.

  1. Asal ditambah vektor arah menunjukkan tujuan sinar:

    asal ray + arah ray = tujuan ray

  2. Kurangi rayOrigin dari kedua sisi persamaan:

    rayOrigin + arah rayrayOrigin = tujuan rayrayOrigin

  3. Arah sinar sama dengan tujuan minus asal:

    arah sinar = tujuan sinarasal sinar


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)

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 .

KunciDeskripsi
FilterDescendantsInstancesArray dari objek yang keturunannya digunakan dalam pencarian kandidat raycasting filtering.
FilterTypeEnum.RaycastFilterType 枚列 yang menentukan bagaimana array FilterDescendantsInstances digunakan dalam operasi raycast.
  • Exclude — Setiap BasePart dianggap kecuali yang merupakan keturunan objek di array.
  • Include — Hanya BaseParts yang merupakan keturunan dari objek di array yang dipertimbangkan.
IgnoreWaterBoolean yang menentukan apakah material Air dianggap ketika melakukan raycasting terhadap Terrain .
CollisionGroupNama string dari kelompok kolisi digunakan untuk operasi raycasting.
Pemfilteran Raycast

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)

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.

PropinsiDeskripsi
InstanceSel BasePart atau Terrain yang dilewati oleh sinar yang bertemu.
PositionVector3 posisi intersepsi antara ray dan Instance .
DistanceJarak antara asal sinar dan titik intersepsi.
MaterialThe Enum.Material dari the BasePart atau Terrain di titik intersepsi.
NormalVector3 dari vektor normal dari wajah yang tersilang.
Deteksi Pukulan Raycast

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("No raycast result!")
end