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 memberikan API untuk setiap instans yang dimaksudkan untuk menangani 3D spatial queries dan simulasi, seperti Workspace dan WorldModel .

Rangkuman

Properti

Properti diwarisi dari ModelProperti diwarisi dari PVInstance

Metode

Metode diwarisi dari Model
  • AddPersistentPlayer(playerInstance : Player):void

    Tetapkan model ini menjadi persisten untuk pemain yang ditentukan. Model.ModelStreamingMode harus diatur menjadi PersistenPerPemain untuk perilaku berubah sebagai hasil tambahan.

  • Mengembalikan deskripsi volume yang berisi semua bagian dari Model.

  • Mengembalikan ukuran kotak pembatas terkecil yang berisi semua BaseParts dalam Model, diatur dengan Model.PrimaryPart jika diatur.

  • Mengembalikan semua objek Player yang bertahan untuk model objek ini. Perilaku bervariasi tergantung pada apakah metode ini dianggap dari Script atau LocalScript .

  • Mengembalikan skala kanonik model, yang default ke 1 untuk model baru yang dibuat dan akan berubah saat skalanya melalui Model/ScaleTo .

  • MoveTo(position : Vector3):void

    Pindahkan PrimaryPart ke posisi yang diberikan. Jika bagian utama tidak ditentukan, bagian akar model akan digunakan.

  • RemovePersistentPlayer(playerInstance : Player):void

    Membuat model ini tidak lagi bertahan untuk pemain tertentu. Model.ModelStreamingMode harus diatur menjadi PersistentPerPlayer untuk perilaku berubah sebagai hasil dari penghapusan.

  • ScaleTo(newScaleFactor : number):void

    Tetapkan skala faktor model, menyesuaikan ukuran dan lokasi semua Instans yang turun sehingga mereka memiliki skala faktor relatif terhadap ukuran dan lokasi awal mereka ketika skala faktor adalah 1.

  • TranslateBy(delta : Vector3):void

    Bergeser sebuah Model olehOffset yang diberikan Vector3 , menjaga orientasi model. Jika BasePart atau 1> Class.Terrain1> sudah ada di posisi baru maka 4> Class.Model4> akan menggeser objek yang dikatakan.

Metode diwarisi dari PVInstance

Properti

Metode

ArePartsTouchingOthers

ApakahPartTouchingOthers menghasilkan true jika setidaknya satu dari BasePart yang diberikan berada di dekat bagian lain. Dua bagian dianggap "ber触摸" jika mereka berada dalam batas distribusi, overlapIgnored .

Jika tidak ada bagian yang disediakan, false dikembalikan.

Parameter

partList: Instances

Daftar periksa bagian untuk melihat apakah bagian dalam daftar menyentuh bagian yang tidak dalam daftar.

overlapIgnored: number

Threshold persentase overlapping dalam stud yang diabaikan sebelum bagian dianggap ber触れ.

Nilai Default: 0.000199999995

Memberikan nilai

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

Contoh Kode

Checking for Touching Parts

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)) -- True
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- True
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False

Blockcast

Tulis Paralel

Mengubah bentuk blok dalam arah yang diberikan dan mengembalikan kesalahan pertama dengan sel BasePart atau Terrain. Ini mirip dengan cara WorldRoot:Raycast() casts sebuah sinar lurus dalam arah untuk menemukan kesalahan, tetapi menggunakan bentuk 3D alih-alih sinar.

Tidak seperti WorldRoot:GetPartsInPart(), metode ini tidak mendeteksi BaseParts yang semua berdasarkan bentuk.

Jika terdeteksi pukulan, RaycastResult dikembalikan dengan mengandung informasi pukulan. Propinsi Distance mewakili jarak yang harus ditempuh untuk menemukan pukulan, dan propinsi Position mewakili sudut perspektif yang menyebabkan pukul

Metode ini menghasilkan kesalahan jika dilewati tidak valid CFrame , ukuran, atau masukan arah.

Parameter

cframe: CFrame

Posisi awal dan rotasi dari bentuk blok cast.

size: Vector3

Ukuran balok pembatuhan dalam studs. Ukuran maksimum adalah 512 studs.

direction: Vector3

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

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

Memberikan nilai

Berisi hasil dari operasi shapecast, atau nil jika tidak ada sel BasePart atau Terrain yang cocok.

Contoh Kode

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

void

Fungsi ini mengubah tabel dari BaseParts ke tabel dari CFrames tanpa harus mengeksekusi property default Changed untuk setiap bagian. Ini memberikan cara yang sangat cepat untuk mengubah banyak bagian, karena Anda tidak perlu menghost pengaturan propiet

Argumen ketiga memungkinkan Anda untuk meningkatkan operasi gerakan lebih lanjut. Secara default, acara Class.Object.Changed|Changed

Catat bahwa Anda hanya harus menggunakan fungsi ini jika Anda yakin bahwa gerakan bagian adalah botol pada kode Anda. Cukup atur CFrame property dari setiap bagian dan model baja yang dibungkus dalam kebanyakan kasus.

Parameter

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

Memberikan nilai

void

GetPartBoundsInBox

Instances
Tulis Paralel

WorldRoot:GetPartBoundsInBox() mengembalikan matriks yang berisi bagian-bagian yang terbatas kotak-kotaknya menggabung kotak yang memiliki volume dijelaskan menggunakan pusat yang diberikan ( CFrame ) dan ukuran ( 0> Datatype.Vector30> ).

Seperti disoroti, metode pengambilan sederhana ini secara efisien mempertimbangkan volume bagian yang terikat bukanlah volume aktual mereka. Ini mungkin penting ketika mempertimbangkan silinder, bola, persyaratan, dan MeshParts yang memiliki bentuk non-blok. Untuk kasus di mana ketepatan sangat penting, gunakan

Metode ini menggunakan objek OverlapParams untuk menggambarkan bagian yang dapat diulang dari pencarian ruang, seperti daftar включение atau eksklusi, jumlah maksimum bagian untuk dipencari, apa grup kollision untuk digunakan, dan apakah query menguntungkan

Parameter

cframe: CFrame

Lokasi pusat volume kotak yang diberikan untuk diambil.

size: Vector3

Ukuran volume kotak yang diberikan untuk diunduh.

overlapParams: OverlapParams

Berisi bagian yang dapat diulang dari parameter pencarian ruang.

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

Memberikan nilai

Instances

Sebuah matriks BaseParts yang cocok dengan pencarian ruang.

GetPartBoundsInRadius

Instances
Tulis Paralel

WorldRoot:GetPartBoundsInRadius() mengembalikan array dari bagian yang cuaca panjang persamaan persamaan bola yang menggabungkan volume yang dijelaskan menggunakan pusat ( Vector3 ) dan radius (number).

Seperti disoroti, metode pengambilan sederhana ini secara efisien mempertimbangkan volume bagian yang terikat bukanlah volume aktual mereka. Ini mungkin penting ketika mempertimbangkan silinder, bola, persyaratan, dan MeshParts yang memiliki bentuk non-blok. Untuk kasus di mana ketepatan sangat penting, gunakan

Metode ini menggunakan objek OverlapParams untuk menggambarkan bagian yang dapat diulang dari pencarian ruang, seperti daftar включение atau eksklusi, jumlah maksimum bagian untuk dipencari, apa grup kollision untuk digunakan, dan apakah query menguntungkan

Parameter

position: Vector3

Lokasi pusat volume kugel yang diberikan untuk dipertanyakan.

radius: number

Radius dari volume kugel yang diberikan untuk dipertanyakan.

overlapParams: OverlapParams

Berisi bagian yang dapat diulang dari parameter pencarian ruang.

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

Memberikan nilai

Instances

Sebuah matriks BaseParts yang cocok dengan pencarian ruang.

GetPartsInPart

Instances
Tulis Paralel

WorldRoot:GetPartsInPart() mengembalikan matriksi bagian yang diisi dengan bagian yang diberikan (yang harus ada dalam WorldRoot yang sama dengan bagian yang diminta). Metode ini dapat digunakan di tempat Class.BasePart:GetTouchingParts() dan biasanya lebih baik pilihan.

Seperti yang dinyatakan, metode pengambilan periksaruang ini menganggap volume yang tepat yang ditempati oleh bagian yang diberikan menggunakan pemeriksaan tabrakan geometrik penuh. Sebagai contoh, bagian konvek/holeh tidak akan cocok dengan bagian yang di

Metode ini menggunakan objek OverlapParams untuk menggambarkan bagian yang dapat diulang dari pencarian ruang, seperti daftar включение atau eksklusi, jumlah maksimum bagian untuk dipencari, apa grup kollision untuk digunakan, dan apakah query menguntungkan

Parameter

part: BasePart

Bagian cuaca yang akan diperiksa terhadap bagian lain.

overlapParams: OverlapParams

Berisi bagian yang dapat diulang dari parameter pencarian ruang.

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

Memberikan nilai

Instances

Sebuah matriks BaseParts yang cocok dengan pencarian ruang.

IKMoveTo

void
Keamanan Plugin

Fungsi ini pindahkan bagian yang ditentukan ke lokasi yang ditentukan melalui kinematika terbalik daripada menempatkannya secara langsung, untuk menjamin kesatuan apa pun, constraints , atau kolisi yang bagian itu berpartisipasi tetap terasa fisik. Saat ini fungsi ini hanya tersedia di Studio untuk Class.Plugin

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

Sebagai contoh:

  • Jika ketahanan terjemahan dan rotasi ketahanan sama dengan 1, maka bagian akan diangkat persis ke target CFrame terlepas dari apa batasan fisik yang ada di atasnya.
  • Jika ketahanan terjemahan dan rotasi ketahanan sama dengan 0,5, maka bagian akan mencoba untuk pindah ke persis target CFrame, tetapi mungkin dipusulkan keluar dari jalan oleh kendala fisik di atasnya.
  • Jika ketahanan terjemahan dan rotasi ketahanan sama, maka target CFrame akan diabaikan dan kendala fisik akan dipecahkan untuk objek di posisi di mana itu berada.

Parameter

part: BasePart

Bagian yang diangkat.

target: CFrame

Lokasi untuk pindahkan bagian yang ditentukan.

translateStiffness: number

Sebuah nomor antara 0 dan 1 yang menentukan seberapa agresif untuk mencocokkan posisi bagian dengan posisi bagian target CFrame .

Nilai Default: 0.5
rotateStiffness: number

Sebuah nomor antara 0 dan 1 yang menentukan seberapa agresif untuk mencocokkan rotasi bagian dengan bagian rotasi target CFrame .

Nilai Default: 0.5
collisionsMode: Enum.IKCollisionsMode

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

Nilai Default: "OtherMechanismsAnchored"

Memberikan nilai

void
Tulis Paralel

Menggunakan sinar menggunakan asal, arah, dan opsi RaycastParams . Jika itu menemukan sel BasePart atau Terrain yang memenuhi k

Catat bahwa panjang (magnitudo) dari vector arah penting, karena objek / terreno yang lebih jauh daripada panjangnya tidak akan diuji. Jika Anda menggunakan CFrame untuk membantu menciptakan komponen ray, pertimbangkan menggunakan Datatype

Metode ini tidak menggunakan objek Ray, tetapi komponen asal dan arahnya dapat dipinjam dari Ray.Origin dan 1>Datatype.Ray.Direction1>.

Parameter

origin: Vector3

Poin asal dari sinar.

direction: Vector3

Vektor arah dari ray. Catat bahwa panjangnya vektor ini penting, karena bagian / terreno lebih jauh daripada panjangnya tidak akan diuji.

raycastParams: RaycastParams

Objek yang digunakan untuk menentukan kelayakan pukulan dalam operasi raycast. Jika tidak diberikan, nilai default digunakan di mana semua bagian dianggap 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 BasePart atau Terrain yang berlokasi di dekatnya yang terkena.

Contoh Kode

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
direction: Vector3
Nilai Default: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Memberikan nilai

Spherecast

Tulis Paralel

Mengkastilkan bentuk kubus di arah yang diberikan dan mengembalikan kesalahan pertama dengan BasePart atau Terrain sel. Ini mirip dengan cara WorldRoot:Raycast() mengkastilkan sinar lurus di arah untuk menemukan kesalahan, tetapi menggunakan bentuk 3D alih-alih sinar.

Tidak seperti WorldRoot:GetPartsInPart(), metode ini tidak mendeteksi BaseParts yang semua berdasarkan bentuk.

Jika terdeteksi pukulan, RaycastResult dikembalikan dengan mengandung informasi pukulan. Propinsi Distance mewakili jarak yang harus ditempuh untuk menemukan pukulan, dan propinsi Position mewakili sudut perspektif yang menyebabkan pukul

Metode ini menghasilkan kesalahan jika diberikan masukan radius atau arah yang tidak valid.

Parameter

position: Vector3

Posisi awal dari bentuk kastil.

radius: number

Radius dari bentuk kubus cast dalam studs. Radius maksimum adalah 256 studs.

direction: Vector3

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

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

Memberikan nilai

Berisi hasil dari operasi shapecast, atau nil jika tidak ada sel BasePart atau Terrain yang cocok.

Contoh Kode

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

void
Keamanan Plugin

Meningkatkan simulasi untuk bagian di dunia ke depan berdasarkan peningkatan waktu t

Parameter

dt: number

Jumlah waktu yang akan di simulasi. Anggota ini harus menjadi angka positif. Nilai yang lebih besar akan meningkatkan waktu pemrosesan fungsi ini.

parts: Instances

Array opcional dari bagian yang akan di simulasi. Set ini harus berisi instans yang bertipe BasePart ; set jenis lainnya akan diabaikan.

Nilai Default: "{}"

Memberikan nilai

void

Contoh Kode

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