WorldRoot
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
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 ModelEstablece 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.
La parte principal de la Model , o nil si no se establecerexplícitamente.
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.
Determina dónde se encuentra el eje de un que no tenga un conjunto establecido.
Métodos
Devuelve verdadero si cualquiera de los dados BasePart está tocando cualquier otra parte.
Lanza una forma de bloque en una dirección determinada y devuelve un RaycastResult si la forma golpea una celda BasePart o Terrain .
Devuelve un array de partes cuyas cajas de límite se superponen a una caja delimitadoradada.
Devuelve un array de partes cuyas cajas de límite se superponen a una esfera dada.
Devuelve un array de partes cuyo espacio ocupado se comparte con la parte dada.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Mueve la parte especificada a la ubicación especificada a través de cinemática inversa en lugar de moverla allí directamente, para garantizar que cualquier articulación, restricción o colisión en la que participe esa parte se mantenga satisfecha físicamente.
Lanza un rayo usando un origen, dirección y opcional RaycastParams , luego devuelve un RaycastResult si un objeto o terreno elegible intersecta el rayo.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Lanza una forma esférica en una dirección determinada y devuelve un RaycastResult si la forma golpea una celda BasePart o Terrain .
Avanza la simulación para piezas en el mundo hacia adelante basada en un incremento de tiempo especificado y un conjunto opcional de BaseParts .
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.
Mueve el PrimaryPart a la posición dada. Si no se ha especificado una parte principal, se usará la parte raíz del modelo.
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.
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.
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.
Obtiene el pivote de un PVInstance .
Transforma el PVInstance junto con todos sus descendientes PVInstances de tal manera que el pivote ahora se encuentra en el punto especificado CFrame.
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
Una lista de comprobaciones de piezas para ver si alguna parte de la lista está tocando alguna parte que no esté en la lista.
El umbral de superposición de partes en studs que se ignora antes de que las partes se consideren que están tocando.
Devuelve
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.
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
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
La posición inicial y la rotación de la forma del bloque de lanzamiento.
El tamaño del bloque de lanzamiento en studs. El tamaño máximo es de 512 studs.
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.
Devuelve
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.
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
Devuelve
GetPartBoundsInBox
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
La ubicación del centro del volumen de caja dado para buscar.
El tamaño del volumen de caja dado para buscar.
Contiene porciones reutilizables de los parámetros de consulta espacial.
Devuelve
Un array de BaseParts que coincidió con la consulta espacial.
GetPartBoundsInRadius
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
La ubicación del centro del volumen de esfera dado que se debe consultar.
El radio del volumen de esfera dado que se debe consultar.
Contiene porciones reutilizables de los parámetros de consulta espacial.
Devuelve
Un array de BaseParts que coincidió con la consulta espacial.
GetPartsInPart
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
La parte cuyo volumen se debe comprobar contra otras partes.
Contiene porciones reutilizables de los parámetros de consulta espacial.
Devuelve
Un array de BaseParts que coincidió con la consulta espacial.
IKMoveTo
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
La parte que se está moviendo.
La ubicación para mover la parte especificada.
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 .
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 .
Le permite especificar qué objetos deberían verse afectados por la resolución física.
Devuelve
Raycast
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
El punto de origen del rayo.
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.
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.
Devuelve
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.
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
Devuelve
Spherecast
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
La posición inicial de la forma esférica de lanzamiento.
El radio de la forma esférica de lanzamiento en tachuelas. El radio máximo es 256 tachuelas.
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.
Devuelve
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.
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 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
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.
Arreglo opcional de partes que se simularán. Este conjunto debe contener instancias de tipo BasePart ; cualquier otro tipo se ignorará.
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.
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)