WorldRoot

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

No creable

Esta clase base proporciona una API para cualquier instancia destinada a manejar consultas y simulación espacial 3D, como Workspace y WorldModel.

Resumen

Propiedades

Propiedades heredados de Model
  • Seguridad del plugin
    Leer paralelo

    Establece el nivel de detalle en el modelo para experiencias con transmisión de instancias habilitada.

  • Controla el comportamiento de transmisión de modelos en Models.

  • Leer paralelo

    La parte principal de la Model , o nil si no se establecerexplícitamente.

  • No replicado
    No programable
    Leer paralelo

    Propiedad solo del editor utilizada para escalar el modelo alrededor de su pivote. Establecer esta propiedad moverá la escala como si se llamara Model/ScaleTo a ella.

  • No replicado
    Leer paralelo

    Determina dónde se encuentra el eje de un que no tenga un conjunto establecido.

Propiedades heredados de PVInstance

Métodos

Métodos heredados de Model
  • AddPersistentPlayer(playerInstance : Player):()

    Establece este modelo para que sea persistente para el jugador especificado. Model.ModelStreamingMode debe establecerse en PersistentPerPlayer para que el comportamiento se cambie como resultado de la adición.

  • Devuelve una descripción de un volumen que contiene todas las partes de un modelo.

  • Devuelve el tamaño de la caja de contención más pequeña que contiene todo el BaseParts en el Model, alineada con el Model.PrimaryPart si se establecer.

  • Devuelve todos los objetos Player que este objeto de modelo es persistente para.El comportamiento varía según si este método se llama desde un Script o un LocalScript.

  • Devuelve la escala canónica del aplicación de modelado, que se establece por defecto en 1 para los modelos recién creados y cambiará a medida que se escala a través de Model/ScaleTo.

  • MoveTo(position : Vector3):()

    Mueve el PrimaryPart a la posición dada. Si no se ha especificado una parte principal, se usará la parte raíz del modelo.

  • RemovePersistentPlayer(playerInstance : Player):()

    Hace que este modelo ya no sea persistente para el jugador especificado. Model.ModelStreamingMode debe establecerse en PersistentPerPlayer para que el comportamiento se cambie como resultado de la eliminación.

  • ScaleTo(newScaleFactor : number):()

    Establece el factor de escala del aplicación de modelado, ajustando el tamaño y la ubicación de todas las Instancias descendientes para que tengan ese factor de escala en relación con sus tamaños y ubicaciones iniciales cuando el factor de escala era 1.

  • TranslateBy(delta : Vector3):()

    Cambia un Model por el desplazamiento dado Vector3, preservando la orientación del aplicación de modelado.Si otro BasePart o Terrain ya existe en la nueva posición, entonces el Model se superpondrá al objeto dicho.

Métodos heredados de PVInstance

Propiedades

Métodos

ArePartsTouchingOthers

ArePartsTouchingOthers devuelve verdadero si al menos uno de los dados BasePart está tocando cualquier otra parte.Dos partes se consideran "tocando" si están dentro del umbral de distancia, overlapIgnored .

Si no se proporcionan partes, se devuelve falso.

Parámetros

partList: Instances

Una lista de comprobaciones de piezas para ver si alguna parte de la lista está tocando alguna parte que no esté en la lista.

Valor predeterminado: ""
overlapIgnored: number

El umbral de superposición de partes en studs que se ignora antes de que las partes se consideren que están tocando.

Valor predeterminado: 0.000199999995

Devuelve

Verdadero si y solo si alguna de las parts en partList está tocando alguna otra parte (partes que no están en la lista de partes). Falso si no se pasan partes.

Muestras de código

The code block below demonstrates how to use WorldRoot:ArePartsTouchingOthers() to check if parts in a list are touching any parts in the workspace not in the list.

First the script creates two square parts that overlap 1 stud, Part1 and Part2. Then, it prints the value returned by ArePartsTouchingOthers() when Part1 is passed in partList at three different overlap values: 0, 0.999, and 1. The first two times ArePartsTouchingOthers() is called return false because the overlap values are less than the distance that Part1 and Part2 overlap. The third call returns true because the overlap value is equal to the distance that the parts overlap.

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

Escribir paralelo

Lanza una forma de bloque en una dirección determinada y devuelve la primera colisión con una celda BasePart o Terrain .Esto es análogo a cómo WorldRoot:Raycast() lanza un rayo lineal en una dirección para encontrar una colisión, pero usa una forma 3D en lugar de un rayo.

A diferencia de WorldRoot:GetPartsInPart() , este método no detecta BaseParts que inicialmente intersecte la forma.

Si se detecta un golpe, se devuelve un RaycastResult que contiene la información del golpe.La propiedad Distance representa la distancia que la forma debe recorrer para encontrar un golpe, y la propiedad Position representa el punto de intersección que causa el golpe.

Este método lanza un error si se pasan entradas inválidas de CFrame , tamaño o dirección.

Parámetros

cframe: CFrame

La posición inicial y la rotación de la forma del bloque de lanzamiento.

Valor predeterminado: ""
size: Vector3

El tamaño del bloque de lanzamiento en studs. El tamaño máximo es de 512 studs.

Valor predeterminado: ""
direction: Vector3

Dirección del shapecast, con la magnitud que representa la distancia máxima que la forma puede recorrer. La distancia máxima es de 1024 tachuelas.

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

Devuelve

Contiene el resultado de la operación de modelado de formas, o nil si no se golpeó una celda válida BasePart o Terrain .

Muestras de código

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

()

Esta función mueve una tabla de BaseParts a una tabla de CFrames sin necesariamente disparar los eventos predeterminados de propiedad Changed .Esto proporciona una manera muy rápida de mover un gran número de piezas, ya que no tienes que pagar el costo de conjuntos de propiedad separados para cada parte individual.

El tercer argumento te permite optimizar aún más la operación de movimiento.Por defecto, el evento Changed de cada parte se activa para Position, Orientation y CFrame.Sin embargo, si especifica FireCFrameChanged como tercer argumento, solo se desencadenarel evento Changed para la propiedad CFrame.

Tenga en cuenta que solo debe usar esta función si está seguro de que el movimiento de parte es un cuello de botella en su código.Simplemente establecer la propiedad CFrame de las piezas individuales y los modelos soldados es suficientemente rápido en la mayoría de los casos.

Parámetros

partList: Instances
Valor predeterminado: ""
cframeList: Array
Valor predeterminado: ""
Valor predeterminado: "FireAllEvents"

Devuelve

()

GetPartBoundsInBox

Instances
Escribir paralelo

WorldRoot:GetPartBoundsInBox() devuelve un array de partes cuyas cajas de límite coinciden con una caja cuyo volumen se describe usando el centro dado ( CFrame ) y el tamaño ( Vector3 ).

Como se enfatizó, este método de consulta espacial considera eficientemente el volumen de las cajas de contención de las piezas en lugar de su volumen real ocupado.Esto puede ser importante al considerar cilindros, esferas, uniones y MeshParts que tienen formas no bloqueadas.Para casos en los que la precisión es especialmente importante, utilice WorldRoot:GetPartsInPart() en su lugar, o filtre aún más los resultados de este método usted mismo.

Este método usa un objeto para describir porciones reutilizables de la consulta espacial, como una lista de inclusión o exclusión, el número máximo de partes a consultar, qué grupo de colisión usar y si la consulta favorece el valor de de una parte interseccionada sobre su valor de .

Parámetros

cframe: CFrame

La ubicación del centro del volumen de caja dado para buscar.

Valor predeterminado: ""
size: Vector3

El tamaño del volumen de caja dado para buscar.

Valor predeterminado: ""
overlapParams: OverlapParams

Contiene porciones reutilizables de los parámetros de consulta espacial.

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

Devuelve

Instances

Un array de BaseParts que coincidió con la consulta espacial.

GetPartBoundsInRadius

Instances
Escribir paralelo

WorldRoot:GetPartBoundsInRadius() devuelve un array de partes cuyas cajas de límite se superponen a una esfera cuyo volumen se describe usando el centro dado ( Vector3 ) y el radio (número).

Como se enfatizó, este método de consulta espacial considera eficientemente el volumen de las cajas de contención de las piezas en lugar de su volumen real ocupado.Esto puede ser importante al considerar cilindros, esferas, uniones y MeshParts que tienen formas no bloqueadas.Para casos en los que la precisión es especialmente importante, utilice WorldRoot:GetPartsInPart() en su lugar, o filtre aún más los resultados de este método usted mismo.

Este método usa un objeto para describir porciones reutilizables de la consulta espacial, como una lista de inclusión o exclusión, el número máximo de partes a consultar, qué grupo de colisión usar y si la consulta favorece el valor de de una parte interseccionada sobre su valor de .

Parámetros

position: Vector3

La ubicación del centro del volumen de esfera dado que se debe consultar.

Valor predeterminado: ""
radius: number

El radio del volumen de esfera dado que se debe consultar.

Valor predeterminado: ""
overlapParams: OverlapParams

Contiene porciones reutilizables de los parámetros de consulta espacial.

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

Devuelve

Instances

Un array de BaseParts que coincidió con la consulta espacial.

GetPartsInPart

Instances
Escribir paralelo

WorldRoot:GetPartsInPart() devuelve un array de partes cuyo espacio ocupado se comparte con la parte dada (que debe existir en el mismo WorldRoot que las partes a consultar).Este método se puede usar en lugar de BasePart:GetTouchingParts() y es generalmente una mejor opción.

Como se señaló, este método de consulta espacial considera el volumen exacto ocupado por la parte dada usando una verificar, comprobarde colisión geométrica completa.Como ejemplo, una parte cóncava/hueca no coincidirá con las partes consultadas dentro de ella a menos que realmente se superpongan/tocan una parte así.Para volúmenes más simples, considere el uso de WorldRoot:GetPartBoundsInBox() o WorldRoot:GetPartBoundsInRadius(), ya que son menos precisos pero se ejecutan de manera más eficiente.

Este método usa un objeto para describir porciones reutilizables de la consulta espacial, como una lista de inclusión o exclusión, el número máximo de partes a consultar, qué grupo de colisión usar y si la consulta favorece el valor de de una parte interseccionada sobre su valor de .

Parámetros

part: BasePart

La parte cuyo volumen se debe comprobar contra otras partes.

Valor predeterminado: ""
overlapParams: OverlapParams

Contiene porciones reutilizables de los parámetros de consulta espacial.

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

Devuelve

Instances

Un array de BaseParts que coincidió con la consulta espacial.

IKMoveTo

()
Seguridad del plugin

Esta función mueve la parte especificada a la ubicación especificada a través de kinemática inversa en lugar de moverla allí directamente, para garantizar que cualquier articulación, constraints o colisión en la que participe esa parte se mantenga satisfecha físicamente.Actualmente, esta función solo está disponible en Studio para plugins , ya que actualmente coincide con la física de un juego en ejecución.

Traducir la rigidez es un número entre 0 y 1 que especifica qué tan agresivamente igualar la posición de la pieza con la posición de la parte del marco objetivo. Rotar la rigidez es un número entre 0 y 1 que especifica qué tan agresivamente igualar la rotación de la pieza a la rotación de la parte del marco objetivo.

Por ejemplo:

  • Si la rigidez de traducción y la rigidez de rotación son ambas iguales a 1, entonces la parte se moverá exactamente a la CFrame objetivo independientemente de las limitaciones físicas que haya sobre ella.
  • Si la rigidez de traducción y la rigidez de rotación son ambas iguales a 0.5, entonces la parte intentará moverse exactamente al marco CFrame objetivo, pero puede ser empujada de la manera por las limitaciones físicas sobre ella.
  • Si la rigidez de traducción y la rigidez de rotación son ambas iguales a 0, entonces se ignorará el marco objetivo y se resolverán las limitaciones físicas para el objeto en la posición donde se encontraba.

Parámetros

part: BasePart

La parte que se está moviendo.

Valor predeterminado: ""
target: CFrame

La ubicación para mover la parte especificada.

Valor predeterminado: ""
translateStiffness: number

Un número entre 0 y 1 que especifica qué tan agresivamente coincidir la posición de la parte con la posición de la parte del destino CFrame .

Valor predeterminado: 0.5
rotateStiffness: number

Un número entre 0 y 1 que especifica qué tan agresivamente coincidir la rotación de la parte con la parte de rotación del destino CFrame .

Valor predeterminado: 0.5
collisionsMode: Enum.IKCollisionsMode

Le permite especificar qué objetos deberían verse afectados por la resolución física.

Valor predeterminado: "OtherMechanismsAnchored"

Devuelve

()
Escribir paralelo

Lanza un rayo usando un origen, dirección y opcional RaycastParams .Si encuentra una celda elegible BasePart o Terrain , se devuelve un RaycastResult que contiene los resultados de la operación.Si no se proporciona ningún objeto RaycastParams, se usan los valores predeterminados (se consideran todas las partes y el agua Terrain no se ignora).

Tenga en cuenta que la longitud (magnitud) del vector direccional es importante, ya que los objetos/terreno más lejos de su longitud no se someterán a prueba.Si estás usando un CFrame para ayudar a crear los componentes del rayo, considera usar CFrame.LookVector como vector direccional y multiplícalo por la longitud deseada como se muestra en el ejemplo a continuación.La longitud máxima del vector de dirección es de 15,000 tachuelas.

Este método no hace no use un objeto Ray pero sus componentes de origen y dirección se pueden tomar prestados de Ray.Origin y Ray.Direction .

Parámetros

origin: Vector3

El punto de origen del rayo.

Valor predeterminado: ""
direction: Vector3

El vector direccional del rayo. Tenga en cuenta que la longitud de este vector es importante, ya que las partes/terreno más lejos de su longitud no se someterán a prueba.

Valor predeterminado: ""
raycastParams: RaycastParams

Un objeto utilizado para especificar la elegibilidad de golpe en la operación de lanzamiento de rayos.Si no se proporciona, se utilizan los valores predeterminados donde se consideran todas las partes y el agua Terrain no se ignora.

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

Devuelve

Contiene los resultados de una operación de lanzamiento de rayos, o nil si no se golpeó una celda válida BasePart o Terrain .

Muestras de código

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

Parámetros

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

Devuelve

Spherecast

Escribir paralelo

Lanza una forma esférica en una dirección determinada y devuelve la primera colisión con una celda BasePart o Terrain .Esto es análogo a cómo WorldRoot:Raycast() lanza un rayo lineal en una dirección para encontrar una colisión, pero usa una forma 3D en lugar de un rayo.

A diferencia de WorldRoot:GetPartsInPart() , este método no detecta BaseParts que inicialmente intersecte la forma.

Si se detecta un golpe, se devuelve un RaycastResult que contiene la información del golpe.La propiedad Distance representa la distancia que la forma debe recorrer para encontrar un golpe, y la propiedad Position representa el punto de intersección que causa el golpe.

Este método lanza un error si se pasan entradas de radio o dirección inválidas.

Parámetros

position: Vector3

La posición inicial de la forma esférica de lanzamiento.

Valor predeterminado: ""
radius: number

El radio de la forma esférica de lanzamiento en tachuelas. El radio máximo es 256 tachuelas.

Valor predeterminado: ""
direction: Vector3

Dirección del shapecast, con la magnitud que representa la distancia máxima que la forma puede recorrer. La distancia máxima es de 1024 tachuelas.

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

Devuelve

Contiene el resultado de la operación de modelado de formas, o nil si no se golpeó una celda válida BasePart o Terrain .

Muestras de código

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

()
Seguridad del plugin

Avanza la simulación para piezas en el mundo hacia adelante basada en un incremento de tiempo especificado y un conjunto opcional de BasePart .Cuando se especifica un conjunto de partes, solo estas partes se simularán y todas las otras partes del mundo se tratarán como ancladas.Cuando este argumento se deja fuera, todas las partes en el mundo se incluirán en la simulación.El incremento de tiempo especificado puede ser cualquier número positivo, con valores más grandes que aumentan el tiempo de ejecución de la función.Dependiendo del valor del incremento de tiempo, el sistema de física puede subdividirlo en múltiples pasos individuales para mantener la precisión y la estabilidad de la simulación.Incluso si la función realiza múltiples sustituciones, los resultados de la simulación solo se verán una vez que la función se complete.Para visualizar los pasos individuales de una simulación, la función se puede llamar una vez por paso de renderizado a través del evento RunService.RenderStepped.

Parámetros

dt: number

La cantidad de tiempo que se simulará. Este argumento debe ser un número positivo. Los valores más grandes aumentarán el tiempo de ejecución de esta función.

Valor predeterminado: ""
parts: Instances

Arreglo opcional de partes que se simularán. Este conjunto debe contener instancias de tipo BasePart ; cualquier otro tipo se ignorará.

Valor predeterminado: "{}"

Devuelve

()

Muestras de código

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)

Eventos