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.
Anda dapat memancarkan sinar dengan metode WorldRoot:Raycast() (Workspace:Raycast()) dari asal Vector3 dalam arah Vector3.
Pemosisikan Dasarlocal 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.
Asal ditambah vektor arah menunjukkan tujuan dari sinar:
Kurangi dari kedua sisi persamaan:
Arah sinar sama dengan tujuan dikurangi asal:
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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.
| Kunci | Deskripsi |
|---|---|
| FilterDescendantsInstances | Array objek yang keturunannya digunakan dalam memfilter kandidat pemosisikan. |
| FilterType | Enum Enum.RaycastFilterType yang menentukan bagaimana array FilterDescendantsInstances digunakan dalam operasi pemosisikan. |
| IgnoreWater | Boolean yang menentukan apakah material Air dipertimbangkan saat pemosisikan terhadap Terrain. |
| CollisionGroup | Nama String dari grup tabrakan yang digunakan untuk operasi pemosisikan. |
Filter Pemosisikanlocal 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 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.
| Propert | Deskripsi |
|---|---|
| Instance | Objek BasePart atau sel Terrain yang terkena sinar. |
| Position | Posisi Vector3 dari titik persimpangan antara sinar dan Instance. |
| Distance | Jarak antara asal sinar dan titik persimpangan. |
| Material | Material Enum.Material dari BasePart atau Terrain pada titik persimpangan. |
| Normal | Vektor Vector3 dari vektor normal permukaan yang terkena. |
Deteksi Tabrakan Pemosisikanlocal 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("Tidak ada hasil pemosisikan!")end