Pemosisikan

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

Pada dasarnya, pemosisikan adalah tindakan mengirimkan sinar tak terlihat dari titik Vector3 ke arah tertentu dengan panjang yang ditentukan. Setelah dipancarkan, Anda dapat mendeteksi apakah sinar tersebut mengenai BasePart atau sel Terrain.

Laser ditembakkan oleh bola mengambang, dan pemosisikan menentukan apakah laser mengenai platform. Platform yang tersentuh oleh laser akan dihancurkan sementara.

Anda dapat memancarkan sinar dengan metode WorldRoot:Raycast() (Workspace:Raycast()) dari asal Vector3 dalam arah Vector3.

Pemosisikan Dasar

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)

Ketika mungkin, Anda dapat menghitung vektor arah yang tidak diketahui (rayDirection) menggunakan asal dan tujuan yang diketahui. Ini berguna saat memancarkan sinar antara dua titik yang dapat berubah, seperti antara satu karakter pemain dengan karakter lainnya.

  1. Asal ditambah vektor arah menunjukkan tujuan dari sinar:

    rayOrigin+rayDirection=rayDestination\text{rayOrigin} + \text{rayDirection} = \text{rayDestination}

  2. Kurangi rayOrigin\text{rayOrigin} dari kedua sisi persamaan:

    rayOrigin+rayDirectionrayOrigin=rayDestinationrayOrigin\text{rayOrigin} + \text{rayDirection} - \text{rayOrigin} = \text{rayDestination} - \text{rayOrigin}

  3. Arah sinar sama dengan tujuan dikurangi asal:

    rayDirection=rayDestinationrayOrigin\text{rayDirection} = \text{rayDestination} - \text{rayOrigin}


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)

Opsi filter

WorldRoot:Raycast() menerima objek RaycastParams opsional yang memberi tahu pemosisikan untuk secara selektif menyertakan atau mengecualikan BaseParts tertentu, mengabaikan material Air untuk Terrain, atau menggunakan grup tabrakan.

KunciDeskripsi
FilterDescendantsInstancesArray objek yang keturunannya digunakan dalam memfilter kandidat pemosisikan.
FilterTypeEnum Enum.RaycastFilterType yang menentukan bagaimana array FilterDescendantsInstances digunakan dalam operasi pemosisikan.
  • Exclude — Setiap BasePart dipertimbangkan kecuali yang merupakan keturunan objek dalam array.
  • Include — Hanya BaseParts yang merupakan keturunan objek dalam array yang dipertimbangkan.
IgnoreWaterBoolean yang menentukan apakah material Air dipertimbangkan saat pemosisikan terhadap Terrain.
CollisionGroupNama String dari grup tabrakan yang digunakan untuk operasi pemosisikan.
Filter Pemosisikan

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 Tabrakan

Jika operasi pemosisikan mengenai BasePart atau sel Terrain yang memenuhi syarat, objek RaycastResult dikembalikan yang berisi hasilnya. Untuk menguji adanya tabrakan, pastikan hasilnya tidak nil dan gunakan properti berikut sesuai kebutuhan.

PropertDeskripsi
InstanceObjek BasePart atau sel Terrain yang terkena sinar.
PositionPosisi Vector3 dari titik persimpangan antara sinar dan Instance.
DistanceJarak antara asal sinar dan titik persimpangan.
MaterialMaterial Enum.Material dari BasePart atau Terrain pada titik persimpangan.
NormalVektor Vector3 dari vektor normal permukaan yang terkena.
Deteksi Tabrakan Pemosisikan

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("Tidak ada hasil pemosisikan!")
end
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.