WorldRoot

Tampilkan yang Tidak Digunakan Lagi

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

Tidak Dapat Dibuat

Kelas dasar ini menyediakan API untuk instance apa pun yang dimaksudkan untuk menangani pencarian dan simulasi spasial 3D, seperti Workspace dan WorldModel.

Rangkuman

Properti

Properti diwarisi dari Model
  • Keamanan Plugin
    Baca Paralel

    Mengatur tingkat rincian pada model untuk pengalaman dengan streaming instansi diaktifkan.

  • Mengontrol perilaku streaming model di Models ketika streaming instansi diaktifkan.

  • Baca Paralel

    Bagian utama dari Model , atau nil jika tidak secara eksplisit ditetapkan.

  • Tidak Direplikasi
    Tidak Dapat Ditulis Skripnya
    Baca Paralel

    Properti hanya editor yang digunakan untuk memperluas model di sekitar titik pivotnya. Mengatur properti ini akan memindahkan skala seolah-olah Model/ScaleTo dipanggil di atasnya.

  • Tidak Direplikasi
    Baca Paralel

    Menentukan di mana titik pivot dari yang tidak memiliki set terletak.

Properti diwarisi dari PVInstance

Metode

Metode diwarisi dari ModelMetode diwarisi dari PVInstance

Properti

Metode

ArePartsTouchingOthers

ApakahBagianMenyentuhLainnya kembali benar jika setidaknya satu dari yang diberikan BasePart menyentuh bagian lain.Dua bagian dianggap "menyentuh" jika berada dalam ambang batas jarak, overlapIgnored .

Jika tidak ada bagian yang disediakan, false dikembalikan.

Parameter

partList: Instances

Daftar periksa bagian untuk melihat apakah ada bagian di daftar yang menyentuh bagian lain yang tidak ada di daftar.

Nilai Default: ""
overlapIgnored: number

Ambang batas penumpangan bagian dalam stud yang diabaikan sebelum bagian dianggap berhubungan.

Nilai Default: 0.000199999995

Memberikan nilai

Benar jika dan hanya jika salah satu dari parts di partList menyentuh bagian lain (bagian yang tidak ada dalam daftar bagian). Salah jika tidak ada bagian yang dilewati.

Contoh Kode

Blok kode di bawah ini menunjukkan cara menggunakan WorldRoot:ArePartsTouchingOthers() untuk memeriksa apakah bagian dalam daftar menyentuh bagian mana pun di ruang kerja yang tidak ada dalam daftar.

Pertama, skrip membuat dua bagian kotak yang tumpang tindih 1 stud, Part1 dan Part2 .Kemudian, ia mencetak nilai yang dikembalikan oleh ArePartsTouchingOthers() saat Part1 disampaikan di partList pada tiga nilai overlap yang berbeda: 0 , 0.999 , dan 1 .Dua kali pertama ArePartsTouchingOthers() dipanggil kembali false karena nilai overlap kurang dari jarak yang Part1 dan Part2 tumpang.Panggilan ketiga mengembalikan true karena nilai overlap sama dengan jarak di mana bagian-bagian tumpang tindih.

Memeriksa Bagian yang Terkena

local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- Benar
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- Benar
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False

Blockcast

Tulis Paralel

Memancarkan bentuk blok dalam arah tertentu dan mengembalikan kolisi pertama dengan sel BasePart atau Terrain .Ini mirip dengan cara WorldRoot:Raycast() melemparkan sinar linier ke arah untuk menemukan kolisi, tetapi menggunakan bentuk 3D alih-alih sinar.

Tidak seperti WorldRoot:GetPartsInPart() , metode ini tidak mendeteksi BaseParts bahwa awalnya memotong bentuk.

Jika sebuah hit terdeteksi, RaycastResult dikembalikan yang berisi informasi hit.Properti Distance mewakili jarak yang harus ditempuh bentuk untuk menemukan hit, dan properti Position mewakili titik intersepsi yang menyebabkan hit.

Metode ini menyebabkan kesalahan jika diberikan input tidak valid CFrame , ukuran, atau arah.

Parameter

cframe: CFrame

Posisi awal dan rotasi bentuk blok lemparan.

Nilai Default: ""
size: Vector3

Ukuran blok lemparan dalam stud. Ukuran maksimum adalah 512 stud.

Nilai Default: ""
direction: Vector3

Arah dari shapecast, dengan magnitudo yang mewakili jarak maksimum yang dapat ditempuh bentuk. Jarak maksimum adalah 1024 stud.

Nilai Default: ""
Nilai Default: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Memberikan nilai

Berisi hasil operasi shapecast, atau nil jika tidak ada sel yang memenuhi syarat BasePart atau Terrain yang dapat dipukul.

Contoh Kode

Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.

Blockcasting

local Workspace = game:GetService("Workspace")
local function castBlock()
-- The initial position and rotation of the cast block shape
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- The size of the cast block shape
local size = Vector3.new(6, 3, 9)
-- The direction the block is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the block and create a visualization of it
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Block intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between block's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a block every 2 seconds
while true do
castBlock()
task.wait(2)
end

BulkMoveTo

()

Fungsi ini memindahkan tabel dari BaseParts ke tabel dari CFrames tanpa perlu menembakkan peristiwa default property Changed .Ini memberikan cara yang sangat cepat untuk memindahkan banyak bagian, karena Anda tidak perlu membayar biaya set properti terpisah untuk setiap bagian individu.

Argumen ketiga memungkinkan Anda untuk lebih mem optimalkan operasi gerakan.Secara default, acara Changed dari setiap bagian menyala untuk Position , Orientation , dan CFrame .Namun, jika Anda menyebutkan FireCFrameChanged sebagai argumen ketiga, hanya acara Changed untuk properti CFrame yang akan ditembak.

Perhatikan bahwa Anda hanya harus menggunakan fungsi ini jika Anda yakin bahwa gerakan bagian adalah botol leher di kode Anda.Hanya dengan mengatur properti CFrame dari bagian individual dan model las adalah cukup cepat dalam sebagian besar kasus.

Parameter

partList: Instances
Nilai Default: ""
cframeList: Array
Nilai Default: ""
Nilai Default: "FireAllEvents"

Memberikan nilai

()

GetPartBoundsInBox

Instances
Tulis Paralel

WorldRoot:GetPartBoundsInBox() kembali array bagian yang mana kotak pengikatnya tumpang tindih pada kotak yang volumenya dijelaskan menggunakan pusat yang diberikan ( CFrame ) dan ukuran ( Vector3 ).

Seperti disoroti, metode pencarian spasial ini secara efisien mempertimbangkan volume kotak pengikat bagian daripada volume yang sebenarnya ditempati.Ini mungkin penting saat mempertimbangkan silinder, bola, serikat, dan MeshParts yang memiliki bentuk blok tidak.Untuk kasus di mana akurasi sangat penting, gunakan WorldRoot:GetPartsInPart() sebagai gantinya, atau filter lebih lanjut hasil metode ini sendiri.

Metode ini menggunakan objek untuk menggambarkan bagian yang dapat digunakan kembali dari pencarian spasial, seperti daftar pengecualian atau pengecualian, jumlah bagian maksimum untuk dipertanyakan, grup kolisi apa yang harus digunakan, dan apakah pencarian memfavoritkan nilai bagian yang tertumpang atas nilainya.

Parameter

cframe: CFrame

Lokasi pusat dari volume kotak yang diberikan untuk ditanyakan.

Nilai Default: ""
size: Vector3

Ukuran volume kotak yang diberikan untuk ditanyakan.

Nilai Default: ""
overlapParams: OverlapParams

Berisi bagian dapat digunakan kembali dari parameter pencarian spasial.

Nilai Default: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Memberikan nilai

Instances

Sebuah array dari BaseParts yang cocok dengan pencarian spasial.

GetPartBoundsInRadius

Instances
Tulis Paralel

WorldRoot:GetPartBoundsInRadius() kembali array bagian yang mana kotak pengikatnya tertumpang atas sebuah bidang yang volumenya dijelaskan menggunakan pusat yang diberikan ( Vector3 ) dan radius (number).

Seperti disoroti, metode pencarian spasial ini secara efisien mempertimbangkan volume kotak pengikat bagian daripada volume yang sebenarnya ditempati.Ini mungkin penting saat mempertimbangkan silinder, bola, serikat, dan MeshParts yang memiliki bentuk blok tidak.Untuk kasus di mana akurasi sangat penting, gunakan WorldRoot:GetPartsInPart() sebagai gantinya, atau filter lebih lanjut hasil metode ini sendiri.

Metode ini menggunakan objek untuk menggambarkan bagian yang dapat digunakan kembali dari pencarian spasial, seperti daftar pengecualian atau pengecualian, jumlah bagian maksimum untuk dipertanyakan, grup kolisi apa yang harus digunakan, dan apakah pencarian memfavoritkan nilai bagian yang tertumpang atas nilainya.

Parameter

position: Vector3

Lokasi pusat dari volume bidang yang diberikan untuk ditanyakan.

Nilai Default: ""
radius: number

Jari volume bola yang diberikan untuk ditanyakan.

Nilai Default: ""
overlapParams: OverlapParams

Berisi bagian dapat digunakan kembali dari parameter pencarian spasial.

Nilai Default: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Memberikan nilai

Instances

Sebuah array dari BaseParts yang cocok dengan pencarian spasial.

GetPartsInPart

Instances
Tulis Paralel

WorldRoot:GetPartsInPart() mengembalikan array bagian yang ruangnya dibagikan dengan bagian yang diberikan (yang harus ada di dalam WorldRoot seperti bagian yang akan dipertanyakan).Metode ini dapat digunakan sebagai pengganti BasePart:GetTouchingParts() dan umumnya merupakan pilihan yang lebih baik.

Seperti dicatat, metode pencarian spasial ini mempertimbangkan volume yang tepat yang ditempati oleh bagian yang diberikan menggunakan pemeriksaan kolisi geometris penuh.Sebagai contoh, bagian cekung/kosong tidak akan cocok dengan bagian yang ditanyakan di dalamnya kecuali jika mereka benar-benar tumpang tindih/menyentuh bagian seperti itu.Untuk volume yang lebih sederhana, pertimbangkan untuk menggunakan WorldRoot:GetPartBoundsInBox() atau WorldRoot:GetPartBoundsInRadius(), karena mereka kurang akurat tetapi berjalan lebih efisien.

Metode ini menggunakan objek untuk menggambarkan bagian yang dapat digunakan kembali dari pencarian spasial, seperti daftar pengecualian atau pengecualian, jumlah bagian maksimum untuk dipertanyakan, grup kolisi apa yang harus digunakan, dan apakah pencarian memfavoritkan nilai bagian yang tertumpang atas nilainya.

Parameter

part: BasePart

Bagian yang volume nya harus diperiksa terhadap bagian lain.

Nilai Default: ""
overlapParams: OverlapParams

Berisi bagian dapat digunakan kembali dari parameter pencarian spasial.

Nilai Default: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Memberikan nilai

Instances

Sebuah array dari BaseParts yang cocok dengan pencarian spasial.

IKMoveTo

()
Keamanan Plugin

Fungsi ini memindahkan bagian yang ditentukan ke lokasi yang ditentukan melalui kinematika terbalik daripada memindahkannya ke sana secara langsung, untuk memastikan setiap persyaratan, constraints , atau tabrakan yang bagian terlibat dalamnya tetap puas secara fisik.Saat ini fungsi ini hanya tersedia di Studio ke plugins , karena saat ini bertentangan dengan fisika gameyang berjalan.

Terjemahkan ketegangan adalah angka antara 0 dan 1 yang menentukan seberapa agresif untuk mencocokkan posisi bagian dengan posisi bagian target CFrame. Putar ketegangan adalah angka antara 0 dan 1 yang menentukan seberapa agresif untuk mencocokkan rotasi bagian dengan bagian rotasi target CFrame.

Sebagai contoh:

  • Jika menerjemahkan ketegangan dan memutar ketegangan sama dengan 1, maka bagian akan dipindahkan persis ke CFrame target terlepas dari apa batasan fisik ada di atasnya.
  • Jika ketegangan terjemahan dan ketegangan berputar sama dengan 0,5, maka bagian akan berusaha pindah ke persis CFrame target, tetapi mungkin dorong dari jalan oleh batasan fisik pada itu.
  • Jika ketegangan terjemahan dan ketegangan berputar sama dengan 0, maka CFrame target akan diabaikan dan batasan fisik akan diselesaikan untuk objek di posisi di mana itu berada.

Parameter

part: BasePart

Bagian yang dipindahkan.

Nilai Default: ""
target: CFrame

Lokasi untuk memindahkan bagian yang ditentukan.

Nilai Default: ""
translateStiffness: number

Angka antara 0 dan 1 menentukan seberapa agresif untuk mencocokkan posisi bagian dengan posisi bagian target CFrame .

Nilai Default: 0.5
rotateStiffness: number

Angka antara 0 dan 1 menentukan seberapa agresif untuk mencocokkan rotasi bagian dengan bagian rotasi target CFrame.

Nilai Default: 0.5
collisionsMode: Enum.IKCollisionsMode

Memungkinkan Anda untuk menentukan objek apa yang harus dipengaruhi oleh resolusi fisik.

Nilai Default: "OtherMechanismsAnchored"

Memberikan nilai

()
Tulis Paralel

Melemparkan sinar menggunakan asal, arah, dan opsional RaycastParams .Jika menemukan sel yang memenuhi syarat BasePart atau Terrain , sel RaycastResult dikembalikan yang berisi hasil operasi.Jika tidak ada objek RaycastParams yang disediakan, default akan digunakan (semua bagian dianggap dan Terrain air tidak diabaikan).

Perhatikan bahwa panjang (besaran) vektor arah penting, karena objek/tanah lebih jauh dari panjangnya tidak akan diuji.Jika Anda menggunakan CFrame untuk membantu membuat komponen sinar, pertimbangkan untuk menggunakan CFrame.LookVector sebagai vektor arah dan kalikan dengan panjang yang diinginkan seperti yang ditunjukkan dalam contoh di bawah ini.Panjang maksimum vektor arah adalah 15.000 stud.

Metode ini tidak tidak menggunakan objek Ray , tetapi komponen asal dan arahnya dapat dipinjam dari Ray.Origin dan Ray.Direction .

Parameter

origin: Vector3

Titik asal ray.

Nilai Default: ""
direction: Vector3

Vektor arah dari sinar. Perhatikan bahwa panjang vektor ini penting, karena bagian/tanah yang lebih jauh dari panjangnya tidak akan diuji.

Nilai Default: ""
raycastParams: RaycastParams

Sebuah objek yang digunakan untuk menentukan kelayakan pukul dalam operasi raycast.Jika tidak disediakan, nilai default digunakan di mana semua bagian dipertimbangkan dan Terrain air tidak diabaikan.

Nilai Default: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Memberikan nilai

Berisi hasil dari operasi raycast, atau nil jika tidak ada sel yang memenuhi syarat BasePart atau Terrain yang dipukul.

Contoh Kode

Casts a ray and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.

Raycasting

local Workspace = game:GetService("Workspace")
local function castRay()
-- The origin point of the ray
local originPosition = Vector3.new(0, 50, 0)
-- The direction the ray is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the ray
local distance = 50
-- Cast the ray and create a visualization of it
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Ray intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between ray origin and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a ray every 2 seconds
while true do
castRay()
task.wait(2)
end

Shapecast

Parameter

part: BasePart
Nilai Default: ""
direction: Vector3
Nilai Default: ""
Nilai Default: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Memberikan nilai

Spherecast

Tulis Paralel

Memancarkan bentuk bola pada arah tertentu dan mengembalikan kolisi pertama dengan sel BasePart atau Terrain .Ini mirip dengan cara WorldRoot:Raycast() melemparkan sinar linier ke arah untuk menemukan kolisi, tetapi menggunakan bentuk 3D alih-alih sinar.

Tidak seperti WorldRoot:GetPartsInPart() , metode ini tidak mendeteksi BaseParts bahwa awalnya memotong bentuk.

Jika sebuah hit terdeteksi, RaycastResult dikembalikan yang berisi informasi hit.Properti Distance mewakili jarak yang harus ditempuh bentuk untuk menemukan hit, dan properti Position mewakili titik intersepsi yang menyebabkan hit.

Metode ini membuang kesalahan jika radius atau input arah tidak valid ditransmisikan.

Parameter

position: Vector3

Posisi awal dari bentuk bola yang dilemparkan.

Nilai Default: ""
radius: number

Radius dari bentuk bola yang dilemparkan dalam stud. Radius maksimum adalah 256 stud.

Nilai Default: ""
direction: Vector3

Arah dari shapecast, dengan magnitudo yang mewakili jarak maksimum yang dapat ditempuh bentuk. Jarak maksimum adalah 1024 stud.

Nilai Default: ""
Nilai Default: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Memberikan nilai

Berisi hasil operasi shapecast, atau nil jika tidak ada sel yang memenuhi syarat BasePart atau Terrain yang dapat dipukul.

Contoh Kode

Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.

Spherecasting

local Workspace = game:GetService("Workspace")
local function castSphere()
-- The initial position of the cast spherical shape
local originPosition = Vector3.new(0, 50, 0)
-- The radius of the cast spherical shape in studs
local radius = 10
-- The direction the sphere is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the sphere and create a visualization of it
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Sphere intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between sphere's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a sphere every 2 seconds
while true do
castSphere()
task.wait(2)
end

StepPhysics

()
Keamanan Plugin

Memajukan simulasi untuk bagian di dunia ke depan berdasarkan peningkatan waktu yang ditentukan dan satu set opsi BasePart .Ketika satu set bagian ditentukan, hanya bagian-bagian ini yang akan disimulasikan dan semua bagian lain di dunia akan diperlakukan sebagai terpasang.Saat argumen ini ditinggalkan, semua bagian di dunia akan dimasukkan dalam simulasi.Peningkatan waktu yang ditentukan dapat menjadi angka positif, dengan nilai yang lebih besar meningkatkan waktu eksekusi fungsi.Tergantung pada nilai peningkatan waktu, sistem fisika dapat membaginya menjadi beberapa langkah individu untuk menjaga akurasi dan stabilitas simulasi.Bahkan jika fungsi melakukan banyak substep, hasil simulasi hanya akan terlihat setelah fungsi selesai.Untuk menggambarkan langkah-langkah individu dari simulasi, fungsi dapat dipanggil sekali per RenderStep melalui acara RunService.RenderStepped.

Parameter

dt: number

Jumlah waktu yang akan disimulasikan. Argumen ini harus menjadi angka positif. Nilai yang lebih besar akan meningkatkan runtime fungsi ini.

Nilai Default: ""
parts: Instances

배열 opsional dari bagian yang akan disimulasikan. Set ini harus berisi instansi yang berjenis BasePart ; jenis lain akan diabaikan.

Nilai Default: "{}"

Memberikan nilai

()

Contoh Kode

Simulates the parts in the workspace for a fixed period of time by calling the StepPhysics function once per frame until a specified time has elaspsed.

StepPhysics

local RunService = game:GetService("RunService")
-- Optional array of parts to simulate; otherwise all parts will be simulated
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- Simulate workspace parts for 5 seconds, stepping the parts once per frame
simulateParts(5.0)

Acara