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 richieste 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 streaming di istanza abilitato.

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

  • Lettura Parallela

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

  • Non Replicato
    Non programmabile
    Lettura Parallela

    Proprietà utilizzata solo dall'editor per ridimensionare il modello attorno al suo asse. Impostare questa proprietà sposterà la scala come se Model/ScaleTo fosse stata chiamata su di essa.

  • Non Replicato
    Lettura Parallela

    Determina dove si trova il punto di rotazione di un che non ha un set è situato.

Proprietà provenienti da PVInstance

Metodi

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

    Imposta questo modello per essere persistente per il giocatore specificato. ModelStreamingMode deve essere impostato su PersistentPerPlayer perché il comportamento venga cambiato come risultato dell'aggiunta.

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

  • Restituisce la dimensione della più piccola scatola di confine che contiene tutto il BaseParts in Model, allineata con la Model.PrimaryPart se è impostata.

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

  • Restituisce la scala canonica del modello, che predefinisce 1 per i modelli appena creati e cambierà man mano che verrà scala tramite Model/ScaleTo .

  • MoveTo(position : Vector3):()

    Sposta il PrimaryPart a la posizione data. Se una parte primaria non è stata specificata, verrà utilizzata la parte radice del modello.

  • RemovePersistentPlayer(playerInstance : Player):()

    Rende questo modello non più persistente per il giocatore specificato.ModelStreamingMode deve essere impostato su PersistentPerPlayer perché il comportamento venga modificato come risultato della rimozione.

  • ScaleTo(newScaleFactor : number):()

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

  • TranslateBy(delta : Vector3):()

    Sposta un Model con lo spostamento dato Vector3 , preservando l'orientamento del modello.Se un altro BasePart o Terrain esiste già nella nuova posizione allora il Model sovrapporrà l'oggetto dichiarato.

Metodi provenienti da PVInstance

Proprietà

Metodi

ArePartsTouchingOthers

ArePartsTouchingOthers restituisce vero se almeno uno dei BasePart dati tocca qualsiasi altra parte.Due parti sono considerate "toccanti" se sono entro la soglia di distanza, overlapIgnored .

Se non vengono fornite parti, viene restituito falso.

Parametri

partList: Instances

Una lista di controlli delle parti per vedere se qualsiasi parte nella lista sta toccando qualsiasi parte non nella lista.

Valore predefinito: ""
overlapIgnored: number

La soglia di sovrapposizione della parte in studs che viene ignorata prima che le parti vengano considerate come si toccano.

Valore predefinito: 0.000199999995

Restituzioni

Vero se e solo se una qualsiasi delle parts in partList sta toccando altre parti (parti non nella lista delle parti). Falso se non vengono passate parti.

Campioni di codice

Il blocco di codice qui sotto mostra come utilizzare WorldRoot:ArePartsTouchingOthers() per controllare se le parti in una lista stanno toccando qualsiasi parte nell'area di lavoro non nella lista.

Prima lo script crea due parti quadrate che si sovrappongono a 1 stud, Part1 e Part2 .Quindi, stampa il valore restituito da ArePartsTouchingOthers() quando Part1 viene passato in partList a tre diversi valori di sovrapposizione: 0 , 0.999 e 1.Le prime due volte ArePartsTouchingOthers() viene chiamata return false perché i valori di sovrapposizione sono inferiori alla distanza che Part1 e Part2 sovrappongono.La terza chiamata restituisce true perché il valore di sovrapposizione è uguale alla distanza in cui le parti si sovrappongono.

Controllo delle parti toccanti

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

Blockcast

Scrivi Parallelo

Lancia una forma di blocco in una direzione data e restituisce la prima collisione con una cellula BasePart o Terrain .Questo è analogo a come WorldRoot:Raycast() lancia un raggio lineare in una direzione per trovare una collisione, ma utilizza una forma 3D invece di un raggio.

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

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

Questo metodo lancia un errore se viene passato un input di dimensione, direzione o non valido CFrame .

Parametri

cframe: CFrame

La posizione iniziale e la rotazione della forma del blocco di fusione.

Valore predefinito: ""
size: Vector3

La dimensione della forma del blocco di fusione in studs. La dimensione massima è 512 studs.

Valore predefinito: ""
direction: Vector3

Direzione del shapecast, con la magnitudine che rappresenta la distanza massima che la forma può percorrere. La distanza massima è di 1024 studs.

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

Restituzioni

Contiene il risultato dell'operazione di shapecast, o nil se non è stata colpita una cellula idonea BasePart o Terrain .

Campioni di codice

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

()

Questa funzione sposta una tabella di BaseParts a una tabella di CFrames senza necessariamente attivare gli eventi di proprietà predefinita Changed .Questo fornisce un modo molto rapido per spostare un gran numero di parti, poiché non devi pagare il costo di set di proprietà separati per ciascuna parte individuale.

Il terzo argomento ti consente di ottimizzare ulteriormente l'operazione di movimento.Per impostazione predefinita, l'evento Changed di ciascuna parte si attiva per Position , Orientation e CFrame .Tuttavia, se specifici FireCFrameChanged come terzo argomento, verrà Lanciaresolo l'evento Changed per la proprietà CFrame.

Nota che dovresti utilizzare solo questa funzione se sei sicuro che il movimento delle parti è un punto di congestione nel tuo codice.Impostare semplicemente la proprietà CFrame delle singole parti e dei modelli saldati è abbastanza veloce nella maggior parte dei casi.

Parametri

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

Restituzioni

()

GetPartBoundsInBox

Instances
Scrivi Parallelo

WorldRoot:GetPartBoundsInBox() restituisce un array di parti le cui scatole di confezionamento si sovrappongono a una scatola il cui volume è descritto utilizzando il centro dato ( CFrame ) e la dimensione ( Vector3 ).

Come sottolineato, questo metodo di query spaziale considera in modo efficiente il volume delle scatole di confezionamento delle parti piuttosto che il loro volume effettivo occupato.Questo può essere importante quando si considerano cilindri, sfere, unioni e MeshParts che hanno forme non bloccanti.Per i casi in cui l'accuratezza è particolarmente importante, usa WorldRoot:GetPartsInPart() invece, o filtra ulteriormente i risultati di questo metodo da solo.

Questo metodo utilizza un oggetto di riutilizzo per descrivere porzioni riutilizzabili della Queryspaziale, come una lista di inclusione o esclusione, il numero massimo di parti da interrogare, il gruppo di collisione da utilizzare e se la query favorisca il valore di della parte interconnessa rispetto al suo valore.

Parametri

cframe: CFrame

La posizione del centro del volume della scatola data da interrogare.

Valore predefinito: ""
size: Vector3

La dimensione del volume della scatola data da interrogare.

Valore predefinito: ""
overlapParams: OverlapParams

Contiene porzioni riutilizzabili dei parametri della query spaziale.

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

Restituzioni

Instances

Un array di BaseParts che corrisponde alla Queryspaziale.

GetPartBoundsInRadius

Instances
Scrivi Parallelo

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

Come sottolineato, questo metodo di query spaziale considera in modo efficiente il volume delle scatole di confezionamento delle parti piuttosto che il loro volume effettivo occupato.Questo può essere importante quando si considerano cilindri, sfere, unioni e MeshParts che hanno forme non bloccanti.Per i casi in cui l'accuratezza è particolarmente importante, usa WorldRoot:GetPartsInPart() invece, o filtra ulteriormente i risultati di questo metodo da solo.

Questo metodo utilizza un oggetto di riutilizzo per descrivere porzioni riutilizzabili della Queryspaziale, come una lista di inclusione o esclusione, il numero massimo di parti da interrogare, il gruppo di collisione da utilizzare e se la query favorisca il valore di della parte interconnessa rispetto al suo valore.

Parametri

position: Vector3

La posizione del centro del volume sferico dato da interrogare.

Valore predefinito: ""
radius: number

Il raggio del volume sferico dato da interrogare.

Valore predefinito: ""
overlapParams: OverlapParams

Contiene porzioni riutilizzabili dei parametri della query spaziale.

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

Restituzioni

Instances

Un array di BaseParts che corrisponde alla Queryspaziale.

GetPartsInPart

Instances
Scrivi Parallelo

WorldRoot:GetPartsInPart() restituisce un array di parti il cui spazio occupato è condiviso con la parte data (che deve esistere nello stesso WorldRoot delle parti da interrogare).Questo metodo può essere utilizzato invece di BasePart:GetTouchingParts() e in generale è una scelta migliore.

Come notato, questo metodo di query spaziale considera il esatto volume occupato dalla parte data utilizzando un Controllare /Verificaredi collisione geometrica completo.Come esempio, una parte concava/hollow non corrisponderà alle parti interrogate all'interno a meno che effettivamente non si sovrappongono/toccano una tale parte.Per volumi più semplici, considera di utilizzare WorldRoot:GetPartBoundsInBox() o WorldRoot:GetPartBoundsInRadius(), poiché sono meno precisi ma si eseguono più efficientemente.

Questo metodo utilizza un oggetto di riutilizzo per descrivere porzioni riutilizzabili della Queryspaziale, come una lista di inclusione o esclusione, il numero massimo di parti da interrogare, il gruppo di collisione da utilizzare e se la query favorisca il valore di della parte interconnessa rispetto al suo valore.

Parametri

part: BasePart

La parte il cui volume deve essere verificato rispetto ad altre parti.

Valore predefinito: ""
overlapParams: OverlapParams

Contiene porzioni riutilizzabili dei parametri della query spaziale.

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

Restituzioni

Instances

Un array di BaseParts che corrisponde alla Queryspaziale.

IKMoveTo

()
Sicurezza Plugin

Questa funzione sposta la parte specificata nella posizione specificata tramite cinematica inversa piuttosto che spostarla direttamente lì, per garantire che qualsiasi articolazione, constraints o collisione a cui la parte partecipa rimanga fisicamente soddisfatta.Attualmente questa funzione è disponibile solo in Studio a plugins , poiché attualmente confligge con la fisica di un Giocoin esecuzione.

Tradurre la rigidità è un numero tra 0 e 1 che specifica quanto aggressivamente abbinare la posizione della parte alla posizione parte del CFrame target. Ruota la rigidità è un numero tra 0 e 1 che specifica quanto aggressivamente abbinare la rotazione della parte alla rotazione della parte del bersaglio CFrame.

Ad esempio:

  • Se la rigidità di traduzione e la rigidità di rotazione sono entrambe uguali a 1, la parte verrà spostata esattamente sul CFrame target indipendentemente da quali restrizioni fisiche ci sono su di essa.
  • Se la rigidità di traduzione e la rigidità di rotazione sono entrambe uguali a 0.5, allora la parte cercherà di muoversi esattamente al CFrame target, ma potrebbe essere spinta fuori strada dalle restrizioni fisiche su di essa.
  • Se la rigidità di traduzione e la rigidità di rotazione sono entrambe uguali a 0, allora la CFrame target verrà ignorata e le restrizioni fisiche verranno risolte per l'oggetto alla posizione in cui era.

Parametri

part: BasePart

La parte spostata.

Valore predefinito: ""
target: CFrame

La posizione in cui spostare la parte specificata.

Valore predefinito: ""
translateStiffness: number

Un numero compreso tra 0 e 1 che specifica quanto aggressivamente abbinare la posizione della parte alla posizione del bersaglio CFrame .

Valore predefinito: 0.5
rotateStiffness: number

Un numero compreso tra 0 e 1 che specifica quanto aggressivamente abbinare la rotazione della parte alla rotazione della parte del bersaglio CFrame .

Valore predefinito: 0.5
collisionsMode: Enum.IKCollisionsMode

Consente di specificare quali oggetti dovrebbero essere interessati dalla risoluzione fisica.

Valore predefinito: "OtherMechanismsAnchored"

Restituzioni

()
Scrivi Parallelo

Lancia un raggio utilizzando un'origine, una direzione e un opzionale RaycastParams .Se trova una cellula idonea BasePart o Terrain , un RaycastResult viene restituito contenente i risultati dell'operazione.Se non viene fornito alcun oggetto RaycastParams oggetto, verranno utilizzati i predefiniti (tutte le parti saranno considerate e l'acqua Terrain non verrà ignorata).

Si noti che la lunghezza (magnitudine) del vector direzionale è importante, poiché gli oggetti/terreno più lontani dalla sua lunghezza non verranno testati.Se stai usando un CFrame per aiutare a creare i componenti del raggio, considera di utilizzare CFrame.LookVector come vector direzionale e moltiplicarlo con la lunghezza desiderata come mostrato nell'esempio seguente.La lunghezza massima del vector di direzione è di 15.000 studs.

Questo metodo non utilizza un oggetto Ray , ma le sue componenti di origine e direzione possono essere prese in prestito da Ray.Origin e Ray.Direction .

Parametri

origin: Vector3

Il punto di origine del raggio.

Valore predefinito: ""
direction: Vector3

Il vector direzionale del raggio. Nota che la lunghezza di questo vector è importante, poiché le parti/terreno più lontane dalla sua lunghezza non verranno testate.

Valore predefinito: ""
raycastParams: RaycastParams

Un oggetto utilizzato per specificare l'idoneità al colpo nell'operazione di raycast.Se non fornito, vengono utilizzati i valori predefiniti dove 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 cella BasePart o Terrain idonea è stata colpita.

Campioni di codice

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

Parametri

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

Restituzioni

Spherecast

Scrivi Parallelo

Lancia una forma sferica in una direzione data e restituisce la prima collisione con una cellula BasePart o Terrain .Questo è analogo a come WorldRoot:Raycast() lancia un raggio lineare in una direzione per trovare una collisione, ma utilizza una forma 3D invece di un raggio.

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

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

Questo metodo lancia un errore se vengono passati input di raggio o direzione non validi.

Parametri

position: Vector3

La posizione iniziale della forma sferica del cast.

Valore predefinito: ""
radius: number

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

Valore predefinito: ""
direction: Vector3

Direzione del shapecast, con la magnitudine che rappresenta la distanza massima che la forma può percorrere. La distanza massima è di 1024 studs.

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

Restituzioni

Contiene il risultato dell'operazione di shapecast, o nil se non è stata colpita una cellula idonea BasePart o Terrain .

Campioni di codice

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

()
Sicurezza Plugin

Avanza la simulazione per le parti nel mondo in avanti in base a un incremento di tempo specificato e a un set opzionale di BasePart .Quando viene specificato un insieme di parti, solo queste parti verranno simulate e tutte le altre parti nel mondo verranno trattate come ancorate.Quando questo argomento viene lasciato fuori, tutte le parti nel mondo saranno incluse nella simulazione.L'incremento temporale specificato può essere qualsiasi numero positivo, con valori più grandi che aumentano l'esecuzione della funzione.A seconda del valore dell'incremento del tempo, il sistema fisico può suddividere in più passi individuali per mantenere l'accuratezza e la stabilità della simulazione.Anche se la funzione esegue più sostituzioni, i risultati della simulazione verranno visti solo quando la funzione sarà completata.Per visualizzare i singoli passi di una simulazione, la funzione può essere chiamata una volta per RenderStep tramite l'evento RunService.RenderStepped.

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.

Valore predefinito: ""
parts: Instances

array opzionale di parti che verranno simulate. Questo set deve contenere istanze di tipo BasePart ; qualsiasi altro tipo verrà ignorato.

Valore predefinito: "{}"

Restituzioni

()

Campioni di codice

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)

Eventi