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>.
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>
Kunci | Deskripsi |
---|---|
FilterDescendantsInstances | Array dari objek cuaca yang digunakan dalam menyaring kandidat raycasting. |
FilterType | Enum.RaycastFilterTypeenum yang menentukan caraFilterDescendantsInstancesarray digunakan dalam operasi raycast. |
IgnoreWater | Boolean yang menentukan apakah bahan Air dipertimbangkan saat raycasting melawan Terrain . |
CollisionGroup | Nama string dari kelompok tabrakan yang digunakan untuk operasi raycasting. |
Raycast Filtering
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)
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.
Origen ditambah dengan vektor arah menunjukkan tujuan sinar:
rayOrigin + rayDirection = rayDestination
Kurangi rayOrigin dari kedua sisi rumus:
rayOrigin + rayDirection − rayOrigin = 0> rayDestination0> − 3> rayOrigin3>
Arahnya sama dengan tujuan minus asal:
rayDirection = rayDestination − rayOrigin
local rayOrigin = workspace.TestOrigin.Positionlocal rayDestination = workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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
Properti | Deskripsi |
---|---|
Instance | Class.BasePart atau Terrain sel yang diintervensi oleh sinar. |
Position | Vector3 posisi persimpangan antara ray dan Instance . |
Distance | Jarak antara titik asal sinar dan titik persimpangan. |
Material | The Enum.Material atau BasePart di titik persimpangan. |
Normal | Vector3 dari vektor normal wajah yang terhubung. |
Deteksi Raycast Hit
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