WorldRoot
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
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 ModelImposta 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.
La parte principale del Model , o nil se non esplicitamente impostata.
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.
Determina dove si trova il punto di rotazione di un che non ha un set è situato.
Metodi
Restituisce vero se una qualsiasi delle BasePart date tocca altre parti.
Lancia una forma di blocco in una direzione data e restituisce un RaycastResult se la forma colpisce una BasePart o Terrain cellula.
Restituisce un array di parti le cui scatole di confezionamento si sovrappongono a una data Quadro di selezione.
Restituisce un array di parti le cui scatole di confezionamento si sovrappongono a una data sfera.
Restituisce un array di parti il cui spazio occupato è condiviso con la parte data.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Sposta la parte specificata nella posizione specificata attraverso la cinematica inversa piuttosto che spostarla direttamente lì per garantire che qualsiasi articolazione, vincolo o collisione a cui la parte partecipa rimanga fisicamente soddisfatta.
Lancia un raggio utilizzando un'origine, una direzione e un'opzione RaycastParams opzionale, quindi restituisce un RaycastResult se un oggetto idoneo o un terreno interseca il raggio.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Lancia una forma sferica in una direzione data e restituisce un RaycastResult se la forma colpisce una BasePart o Terrain cellula.
Avanza la simulazione per le parti nel mondo in avanti in base a un incremento di tempo specificato e a un set opzionale di BaseParts .
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 .
Sposta il PrimaryPart a la posizione data. Se una parte primaria non è stata specificata, verrà utilizzata la parte radice del modello.
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.
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.
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.
Ottiene il punto focale di un PVInstance .
Trasforma il PVInstance insieme a tutti i suoi discendenti PVInstances in modo che il punto di rotazione sia ora situato all'interno del CFrame specificato.
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
Una lista di controlli delle parti per vedere se qualsiasi parte nella lista sta toccando qualsiasi parte non nella lista.
La soglia di sovrapposizione della parte in studs che viene ignorata prima che le parti vengano considerate come si toccano.
Restituzioni
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.
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
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
La posizione iniziale e la rotazione della forma del blocco di fusione.
La dimensione della forma del blocco di fusione in studs. La dimensione massima è 512 studs.
Direzione del shapecast, con la magnitudine che rappresenta la distanza massima che la forma può percorrere. La distanza massima è di 1024 studs.
Restituzioni
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.
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
Restituzioni
GetPartBoundsInBox
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
La posizione del centro del volume della scatola data da interrogare.
La dimensione del volume della scatola data da interrogare.
Contiene porzioni riutilizzabili dei parametri della query spaziale.
Restituzioni
Un array di BaseParts che corrisponde alla Queryspaziale.
GetPartBoundsInRadius
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
La posizione del centro del volume sferico dato da interrogare.
Il raggio del volume sferico dato da interrogare.
Contiene porzioni riutilizzabili dei parametri della query spaziale.
Restituzioni
Un array di BaseParts che corrisponde alla Queryspaziale.
GetPartsInPart
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
La parte il cui volume deve essere verificato rispetto ad altre parti.
Contiene porzioni riutilizzabili dei parametri della query spaziale.
Restituzioni
Un array di BaseParts che corrisponde alla Queryspaziale.
IKMoveTo
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
La parte spostata.
La posizione in cui spostare la parte specificata.
Un numero compreso tra 0 e 1 che specifica quanto aggressivamente abbinare la posizione della parte alla posizione del bersaglio CFrame .
Un numero compreso tra 0 e 1 che specifica quanto aggressivamente abbinare la rotazione della parte alla rotazione della parte del bersaglio CFrame .
Consente di specificare quali oggetti dovrebbero essere interessati dalla risoluzione fisica.
Restituzioni
Raycast
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
Il punto di origine del raggio.
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.
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.
Restituzioni
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.
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
Restituzioni
Spherecast
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
La posizione iniziale della forma sferica del cast.
Il raggio della forma sferica di fusione in studs. Il raggio massimo è 256 studs.
Direzione del shapecast, con la magnitudine che rappresenta la distanza massima che la forma può percorrere. La distanza massima è di 1024 studs.
Restituzioni
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.
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
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
La quantità di tempo che verrà simulata. Questo argomento deve essere un numero positivo. Valori più grandi aumenteranno l'esecuzione di questa funzione.
array opzionale di parti che verranno simulate. Questo set deve contenere istanze di tipo BasePart ; qualsiasi altro tipo verrà ignorato.
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.
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)