WorldRoot

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Non costruibile

Questa classe di base fornisce un'API per qualsiasi istanza destinata a gestire le domande spaziali 3D e la simulazione, come Workspace e WorldModel .

Sommario

Proprietà

Proprietà provenienti da Model
  • Sicurezza Plugin
    Lettura Parallela

    Imposta il livello di dettaglio sul modello per le esperienze con la funzione di streaming in sessione abilitata.

  • Controlla il comportamento di streaming del modello su Models quando è abilitato lo streaming delle istanze.

  • Lettura Parallela

    La parte principale del Model, o nil se non è esplicitamente Impostare.

  • Non Replicato
    Non programmabile
    Lettura Parallela

    Proprietà utilizzata solo dall'editor per scalare il modello intorno al suo pivot. Impostando questa proprietà sposterà lo scala come se Model/ScaleTo fosse stata chiamata su di esso.

  • Non Replicato
    Lettura Parallela

    Determina dove si trova il punto di rotazione di un Model che non ha non un set Model.PrimaryPart è posizionato.

Proprietà provenienti da PVInstance

Metodi

Metodi provenienti da Model
  • AddPersistentPlayer(playerInstance : Player):void

    Imposta questo modello per essere persistente per il Giocatorespecificato. Model.ModelStreamingMode deve essere impostato su PersistentPerPlayer per il comportamento di modifica come risultato dell'aggiungimento.

  • Restituisce una descrizione di un volume che contiene tutte le parti di un modello.

  • Restituisce il valore della più piccola scatola di confezione che contiene tutti i BaseParts in the Model , allineato con il Model.PrimaryPart se è Impostare.

  • Restituisce tutti gli oggetti Player che questo oggetto modello è persistente. Il comportamento varia in base a se questo metodo viene chiamato da un Script o da un LocalScript .

  • Restituisce la scala di canone del modello, che predefinito è 1 per i nuovi modelli creati e cambierà man mano che viene scala via Model/ScaleTo .

  • MoveTo(position : Vector3):void

    Sposta il PrimaryPart alla posizione specificata. Se una parte primaria non è stata specificata, la parte di base del modello sarà utilizzata.

  • RemovePersistentPlayer(playerInstance : Player):void

    Questo modello non è più persistente per il Giocatorespecificato. Model.ModelStreamingMode deve essere impostato su PersistentPerPlayer per il comportamento di modifica come risultato della rimozione.

  • ScaleTo(newScaleFactor : number):void

    Imposta il fattore di escala del modello, regolando la dimensione e la posizione di tutte le istanze discendenti in modo che abbiano quel fattore di escala rispetto alle loro dimensioni e posizione iniziali quando il fattore di escala era 1.

  • TranslateBy(delta : Vector3):void

    Sposta un Model da un dato Vector3 OFFSET, preservando l'orientamento del modello. Se un altro BasePart o 1> Class.Terrain1> esiste già nella nuova posizione, allora il 4> Class.Model4> si sovrappone all'oggetto dichiarato.

Metodi provenienti da PVInstance

Proprietà

Metodi

ArePartsTouchingOthers

ArePartsTouchingOthers restituisce vero se almeno un'area BasePart tocca qualsiasi altra parte. Due parti sono considerate "toccanti" se sono all'interno della soglia di distanza, overlapIgnored .

Se non sono fornite parti, false viene restituita.

Parametri

partList: Instances

Una lista di controlli delle parti per vedere se qualsiasi parte nella lista tocca una parte non nella lista.

overlapIgnored: number

Il limite di sovrapposizione della parte che viene ignorato prima che le parti siano considerate toccate.

Valore predefinito: 0.000199999995

Restituzioni

Vero se e solo se qualsiasi parte dei parts in partList tocca qualsiasi altra parte (non sono parte della partList). Falso se non vengono passate parti.

Campioni di codice

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

Scrivi Parallelo

Casts a block shape in a given direction and returns the first collision with a BasePart or Terrain cell. This is analogous to how WorldRoot:Raycast() casts a linear ray in a direction to find a collision, but it uses a 3D shape instead of a ray.

A differenza di WorldRoot:GetPartsInPart() , questo metodo non rileva BaseParts che inizialmente interseca la forma.

Se viene rilevato un colpo, un RaycastResult viene restituito contenente le informazioni sul colpo. La proprietà Distance rappresenta la distanza che il formato deve percorrere per trovare un colpo, e la proprietà Position rappresenta il punto di intersezione che causa il colpo.

Questo metodo throws un errore se viene passato inválido CFrame , dimensioni o input di direzione.

Parametri

cframe: CFrame

La posizione iniziale e la rotazione della forma del blocco.

size: Vector3

La dimensione del cast block shape in studs. La dimensione massima è 512 studs.

direction: Vector3

Direzione della shapecast, con la magnitudine che rappresenta la distanza massima che la forma può viaggiare. La distanza massima è 1024 studs.

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

Restituzioni

Contiene il risultato dell'operazione shapecast, o nil se non era presente BasePart o Terrain cellulare.

Campioni di codice

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

Questa funzione sposta una tabella di BaseParts a una tabella di CFrames senza necessariamente eseguire gli eventi di proprietà predefinita Changed . Ciò fornisce un modo molto rapido per spostare grandi numeri di parti, poiché non devi pagare il costo di singoli set di proprietà per ciascuna parte.

Il terzo argomento ti consente di ottimizzare ulteriormente l'operazione di movimento. Per impostazione predefinita, l'evento Class.Object.Changed

Nota che dovresti usare questa funzione solo se sei sicuro che il movimento delle parti sia un bottleneck nel tuo codice. Semplicemente impostando la proprietà CFrame delle singole parti e dei modelli saldati è abbastanza veloce nella maggior parte dei casi.

Parametri

partList: Instances
cframeList: Array
Valore predefinito: "FireAllEvents"

Restituzioni

void

GetPartBoundsInBox

Instances
Scrivi Parallelo

WorldRoot:GetPartBoundsInBox() restituisce un array di parti le cui parti di contorno sovrappongono una scatola il cui volume è descrittivo utilizzando il centro ( CFrame ) e la dimensione ( 0> Datatype.Vector30> ).

Come sottolineato, questo metodo di query spaziale considera in modo efficiente il volume delle parti' bounding box piuttosto che il loro volume effettivo occupato. Questo può essere importante quando si considera i cilindri, le sfere, le unioni e MeshParts che hanno forme non bloccate. Per casi in cui l'esattezza è importante, usa invece WorldRoot:GetPartsInPart() invece

Questo metodo utilizza un oggetto OverlapParams per descrivere parti riutilizzabili della Queryspaziale, come una lista di inclusione o esclusione, il numero massimo di parti da Query, quale gruppo di collisione utilizzare e se la query preferisce un valore BasePart.CanCollide rispetto al suo valore 1>

Parametri

cframe: CFrame

La posizione del centro del volume della casella specificata da cui chiedere.

size: Vector3

La dimensione del volume della casella specificata da cui si richiede.

overlapParams: OverlapParams

Contiene parti riutilizzabili dei parametri di query spaziale.

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

Restituzioni

Instances

Un array di BaseParts che corrispondeva alla Queryspaziale.

GetPartBoundsInRadius

Instances
Scrivi Parallelo

WorldRoot:GetPartBoundsInRadius() restituisce un array di parti le cui scatole di confezione si sovrappongono a una sfera il cui volume è descritti utilizzando il centro ( Vector3 ) e il raggio (number).

Come sottolineato, questo metodo di query spaziale considera in modo efficiente il volume delle parti' bounding box piuttosto che il loro volume effettivo occupato. Questo può essere importante quando si considera i cilindri, le sfere, le unioni e MeshParts che hanno forme non bloccate. Per casi in cui l'esattezza è importante, usa invece WorldRoot:GetPartsInPart() invece

Questo metodo utilizza un oggetto OverlapParams per descrivere parti riutilizzabili della Queryspaziale, come una lista di inclusione o esclusione, il numero massimo di parti da Query, quale gruppo di collisione utilizzare e se la query preferisce un valore BasePart.CanCollide rispetto al suo valore 1>

Parametri

position: Vector3

La posizione del centro del volume della sfera specificato da cui chiedere.

radius: number

Il raggio della sfera specificata da chiedere.

overlapParams: OverlapParams

Contiene parti riutilizzabili dei parametri di query spaziale.

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

Restituzioni

Instances

Un array di BaseParts che corrispondeva alla Queryspaziale.

GetPartsInPart

Instances
Scrivi Parallelo

WorldRoot:GetPartsInPart() restituisce un array di parti le quali occupano uno spazio condiviso con la parte specificata (che deve esistere nello stesso WorldRoot delle parti richieste). Questo metodo può essere utilizzato invece di BasePart:GetTouchingParts() e generalmente è una scelta migliore.

Come notato, questo metodo di query spaziale considera il volume esatto occupato dalla parte specificata utilizzando un Controllare /Verificaredi collisione geometrica completo. Ad esempio, una parte concava / vuota non corrisponderà alle parti richieste all'interno di essa a meno che non siano effettivamente sovrapposte / toccate una parte. Per i volumi più semplici, considera di

Questo metodo utilizza un oggetto OverlapParams per descrivere parti riutilizzabili della Queryspaziale, come una lista di inclusione o esclusione, il numero massimo di parti da Query, quale gruppo di collisione utilizzare e se la query preferisce un valore BasePart.CanCollide rispetto al suo valore 1>

Parametri

part: BasePart

La parte il cui volume è da controllare contro le altre parti.

overlapParams: OverlapParams

Contiene parti riutilizzabili dei parametri di query spaziale.

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

Restituzioni

Instances

Un array di BaseParts che corrispondeva alla Queryspaziale.

IKMoveTo

void
Sicurezza Plugin

Questa funzione sposta la parte specificata in una posizione specificata tramite kinematica inversa piuttosto che spostarla direttamente, per garantire qualsiasi articolazione, constraints , o collisioni che parte sta partecipando a rimanere fisicamente soddisfatto. Attualmente questa funzione è disponibile solo in Studio per plugins , poiché attualmente confla con la fisica di

Traduci la durezza è un numero tra 0 e 1 specificando quanto essere aggressivo per corrispondere la posizione della parte alla parte di posizione della CFrame target. Rendi la durezza è un numero tra 0 e 1 specificando quanto essere aggressivo per corrispondere la rotazione della parte alla parte di rotazione della CFrame target.

Ad esempio:

  • Se traduci la durezza e ruota la durezza sono entrambe uguali a 1, allora la parte verrà spostata esattamente al CFrame target indipendentemente da quali siano le restrizioni fisiche su di essa.
  • Se la traduzione della forza e la rotazione della forza sono entrambe pari a 0,5, allora la parte cercherà di spostarsi esattamente alla CFrame target, ma potrebbe essere spinta fuori dal modo dalla forza fisica su di essa.
  • Se la traduzione della forza e la rotazione della forza sono entrambe uguali a 0, allora la CFrame di destinazione sarà ignorata e le restrizioni fisiche saranno risolte per l'oggetto nella posizione in cui è stato.

Parametri

part: BasePart

La parte che viene spostata.

target: CFrame

La posizione in cui spostare la parte specificata.

translateStiffness: number

Un numero tra 0 e 1 che specifica quanto essere aggressivo per corrispondere alla posizione della parte alla parte di posizione del target CFrame .

Valore predefinito: 0.5
rotateStiffness: number

Un numero tra 0 e 1 che specifica quanto essere aggressivo per corrispondere alla rotazione della parte alla parte di rotazione del target CFrame .

Valore predefinito: 0.5
collisionsMode: Enum.IKCollisionsMode

Ti consente di specificare quali oggetti devono essere effettati dalla risoluzione fisica.

Valore predefinito: "OtherMechanismsAnchored"

Restituzioni

void
Scrivi Parallelo

Casts a ray using an origin, direction, and optional RaycastParams . If it finds an eligible BasePart or Terrain cell, a 1> Datatype.RaycastResult1>

Nota che la lunghezza (magnitudo) del vettore direzionale è importante, poiché gli oggetti / terreno lontani dal suo lungo non saranno testati. Se stai usando un CFrame per aiutare a creare i componenti del raggio, considera di usare CFrame.LookVector come direzione del vettore e moltipl

Questo metodo non usa un oggetto Datatype.Ray, ma i suoi componenti di origine e direzione possono essere prestati da Ray e Ray.Origin .

Parametri

origin: Vector3

Il punto di origine del raggio.

direction: Vector3

Il vettore direzionale del raggio. Nota che la lunghezza di questo vettore importa, poiché le parti / terreno lontane dal suo lungo non saranno testate.

raycastParams: RaycastParams

Un oggetto utilizzato per specificare l'ammissibilità degli hit nella operazione raycast. Se non viene fornito, vengono utilizzati i valori predefiniti in cui tutte le parti sono considerate e Terrain l'acqua non viene ignorata.

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

Restituzioni

Contiene i risultati di un'operazione di raycast, o nil se nessuna delle cellule BasePart o Terrain era colpita.

Campioni di codice

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

Parametri

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

Restituzioni

Spherecast

Scrivi Parallelo

Casts a spherical shape in a given direction and returns the first collision with a BasePart or Terrain cell. This is analogous to how WorldRoot:Raycast() casts a linear ray in a direction to find a collision, but it uses a 3D shape instead of a ray.

A differenza di WorldRoot:GetPartsInPart() , questo metodo non rileva BaseParts che inizialmente interseca la forma.

Se viene rilevato un colpo, un RaycastResult viene restituito contenente le informazioni sul colpo. La proprietà Distance rappresenta la distanza che il formato deve percorrere per trovare un colpo, e la proprietà Position rappresenta il punto di intersezione che causa il colpo.

Questo metodo throws un errore se viene passato un input di raggio o di direzione non valido.

Parametri

position: Vector3

La posizione iniziale della forma sferica.

radius: number

Il raggio della forma sferica in studs. Il raggio massimo è 256 studs.

direction: Vector3

Direzione della shapecast, con la magnitudine che rappresenta la distanza massima che la forma può viaggiare. La distanza massima è 1024 studs.

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

Restituzioni

Contiene il risultato dell'operazione shapecast, o nil se non era presente BasePart o Terrain cellulare.

Campioni di codice

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
Sicurezza Plugin

Avanzate la simulazione per le parti nel mondo in base a un incremento di tempo specificato e a un insieme opz

Parametri

dt: number

La quantità di tempo che verrà simulata. Questo argomento deve essere un numero positivo. Valori più grandi aumenteranno l'esecuzione di questa funzione.

parts: Instances

Set opzionale di parti che saranno simulate. Questo set deve contenere istanze di tipo BasePart ; tutti gli altri tipi saranno ignorati.

Valore predefinito: "{}"

Restituzioni

void

Campioni di codice

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)

Eventi