Pemindai

*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 mengirim sinar yang tak terlihat dari titik Vector3 tertentu dengan panjang yang ditentukan. Setelah dikastas, Anda dapat mendeteksi apakah sinar menghantam sel BasePart atau 2>Class.Terrain2>.

Laser diaktifkan dengan mengambil bola mengambang, dan raycasting menentukan apakah laser menghantam platform. Platform yang disentuh oleh laser dihancurkan sementara.

Mengirimkan Sinar

Anda dapat mengirimkan sinar dengan metode WorldRoot:Raycast() ( workspace:Raycast() ) dari asal Vector3 di arah 1> Datatype.Vector31> .

Raycast Dasar

local rayOrigin = Vector3.new(0, 0, 0)
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

Menafsirkan

Class.WorldRoot:Raycast() menerima objek RaycastParams yang opional yang memberi tahu raycast untuk mengambil atau mengecualikan beberapa BaseParts , mengabaikan bahan 0>Water0> untuk Class.Terrain , atau menggunakan kumpulan 3>

KunciDeskripsi
FilterDescendantsInstancesArray dari objek cuaca yang digunakan dalam menyaring kandidat raycasting.
FilterTypeEnum.RaycastFilterTypeenum yang menentukan caraFilterDescendantsInstancesarray digunakan dalam operasi raycast.
  • Exclude — Setiap BasePart dianggap kecuali mereka yang merupakan cendawan dari objek dalam matriksi.
  • Include — Hanya BaseParts yang merupakan cendawan dari objek dalam matriks yang dipertimbangkan.
IgnoreWaterBoolean yang menentukan apakah bahan Air dipertimbangkan saat raycasting melawan Terrain .
CollisionGroupNama string dari kelompok tabrakan yang digunakan untuk operasi raycasting.
Raycast Filtering

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)

Menghitung Arah

Ketika berlaku, Anda dapat menghitung vektor arah yang tidak dikenal (rayDirection) menggunakan asal dan tujuan yang dikenal. Ini berguna ketika menyalakan sinar antara dua poin yang dapat berubah, seperti dari karakter pemain ke karakter lain.

  1. Origen ditambah dengan vektor arah menunjukkan tujuan sinar:

    rayOrigin + rayDirection = rayDestination

  2. Kurangi rayOrigin dari kedua sisi rumus:

    rayOrigin + rayDirectionrayOrigin = 0> rayDestination0> − 3> rayOrigin3>

  3. Arahnya sama dengan tujuan minus asal:

    rayDirection = rayDestinationrayOrigin


local rayOrigin = workspace.TestOrigin.Position
local rayDestination = workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

Mendeteksi Hit

Jika operasi raycasting menghantam sel BasePart atau Terrain yang memenuhi syarat, objek 1> Datatype.RaycastResult1> dikembalikan dengan hasil. Untuk menguji untuk hit, konfirmasi bahwa hasil bukan 4> nil4> dan gunakan propperti berikut

PropertiDeskripsi
InstanceClass.BasePart atau Terrain sel yang diintervensi oleh sinar.
PositionVector3 posisi persimpangan antara ray dan Instance .
DistanceJarak antara titik asal sinar dan titik persimpangan.
MaterialThe Enum.Material atau BasePart di titik persimpangan.
NormalVector3 dari vektor normal wajah yang terhubung.
Deteksi Raycast Hit

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