WorldRoot
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
Esta classe base fornece uma API para qualquer instância destinada a lidar com consultas e simulações espaciais 3D, como Workspace e WorldModel.
Resumo
Propriedades
Propriedades herdados de ModelDefine o nível de detalhe no modelo para experiências com streaming de instâncias ativado.
Controla o comportamento de streaming de modelo em Models.
A parte principal do Model ou nil se não for explicitamente configurar.
Propriedade exclusiva do editor usada para escalar o modelo em torno de seu pivô. Definir essa propriedade moverá a escala como se Model/ScaleTo fosse chamada sobre ela.
Determina onde o pivô de um Model que não tem não tem um conjunto Model.PrimaryPart está localizado.
Métodos
Retorna verdadeiro se alguma das dadas BasePart estiver tocando qualquer outra parte.
Lança uma forma de bloco em uma direção dada e retorna um RaycastResult se a forma atingir uma célula BasePart ou Terrain .
Retorna um conjunto de peças cujas caixas de vinculação se sobrepõem a uma caixa dada .
Retorna um conjunto de peças cujas caixas de vinculação se sobrepõem a uma dada esfera .
Retorna um conjunto de peças cujo espaço ocupado é compartilhado com a peça dada.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Mova a peça especificada para o local especificado através da cinemática inversa em vez de movê-la diretamente para garantir que quaisquer articulações, restrições ou colisões em que a peça está participando permaneçam fisicamente satisfeitas.
Lança um raio usando um origem, direção e opcional RaycastParams , então retorna um RaycastResult se um objeto ou terreno elegível interceptar o raio.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Lança uma forma esférica em uma direção dada e retorna um RaycastResult se a forma atingir uma célula BasePart ou Terrain .
Avança a simulação para peças no mundo para frente com base em um incremento de tempo especificado e em um conjunto opcional de BaseParts.
Define esse modelo para ser persistente para o jogador especificado. Model.ModelStreamingMode deve ser definido como PersistentePerPlayer para que o comportamento seja alterado como resultado da adição.
Retorna uma descrição de um volume que contém todas as partes de um Modelo.
Retorna o tamanho da caixa de contorno mais pequena que contém todo o BaseParts na Model, alinhado com o Model.PrimaryPart se for configurar.
Retorna todos os objetos Player que este objeto de modelo é persistente para.O comportamento varia dependendo de se este método é chamado de um Script ou de um LocalScript.
Retorna a escala canônica do modelo, que padrão é 1 para modelos recém-criados e mudará à medida que for escalado via Model/ScaleTo.
Mova o PrimaryPart para a posição dada. Se uma parte primária não tiver sido especificada, a parte raiz do modelo será usada.
Torna esse modelo não persistente mais para o jogador especificado.Model.ModelStreamingMode deve ser definido como PersistentePerPlayer para que o comportamento seja alterado como resultado da remoção.
Define o fator de escala do modelo, ajustando o tamanho e a localização de todas as Instâncias descendentes de modo que elas tenham esse fator de escala em relação aos seus tamanhos e locais iniciais quando o fator de escala era 1.
Muda um Model por o deslocamento dado Vector3, preservando a orientação do modelo.Se outro BasePart ou Terrain já existir na nova posição, então o Model vai sobrepor o Objetodito.
Obtém o pivô de um PVInstance .
Transforma o PVInstance ao longo de todos os seus descendentes PVInstances de modo que o pivô agora está localizado no CFrame especificado.
Propriedades
Métodos
ArePartsTouchingOthers
ArePartsTouchingOthers retorna verdadeiro se pelo menos um dos dados BasePart estiver tocando qualquer outra parte.Duas partes são consideradas "tocando" se estiverem dentro do limite de distância, overlapIgnored .
Se nenhuma parte for fornecida, falso é retornado.
Parâmetros
Uma lista de verificações de peças para ver se alguma peça na lista está tocando alguma peça não na lista.
O limite de sobreposição de peças em studs que é ignorado antes que as peças sejam consideradas para tocar.
Devolução
Amostras de código
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
Lança uma forma de bloco em uma direção dada e retorna a primeira colisão com uma célula BasePart ou Terrain .Isso é análogo ao modo como WorldRoot:Raycast() lança um raio linear em uma direção para encontrar uma colisão, mas usa uma forma 3D em vez de um raio.
Ao contrário de WorldRoot:GetPartsInPart() , este método não detecta BaseParts que inicialmente intercepta a forma.
Se um golpe for detectado, um RaycastResult é retornado contendo a informação do golpe.A propriedade Distance representa a distância que a forma precisa percorrer para encontrar um acerto e a propriedade Position representa o ponto de intersecção que causa o acerto.
Este método lança um erro se for passado um input inválido de CFrame , tamanho ou direção.
Parâmetros
A posição inicial e a rotação da forma do bloco de lançamento.
O tamanho do bloco de lançamento em studs. O tamanho máximo é 512 studs.
Direção do shapecast, com a magnitude representando a distância máxima que a forma pode viajar. A distância máxima é 1024 studs.
Devolução
Amostras de código
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
Essa função move uma tabela de BaseParts para uma tabela de CFrames sem necessariamente disparar os eventos padrão de propriedade Changed .Isso fornece uma maneira muito rápida de mover um grande número de peças, pois você não precisa pagar o custo de conjuntos de propriedade separados para cada peça individual.
O terceiro argumento permite que você otimize ainda mais a operação de movimento.Por padrão, o evento Changed de cada parte dispara para Position, Orientation e CFrame.No entanto, se você especificar FireCFrameChanged como o terceiro argumento, apenas o evento Changed para a propriedade CFrame será Iniciar / executar.
Observe que você deve usar apenas essa função se tiver certeza de que o movimento de parte é um gargalo em seu código.Simplesmente definir a propriedade CFrame da parte individual e modelos soldados é rápido o suficiente na maioria dos casos.
Parâmetros
Devolução
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() retorna um array de peças cujas caixas de vinculação se sobrepõem a uma caixa cujo volume é descrito usando o centro dado ( CFrame ) e o tamanho ( Vector3 ).
Como enfatizado, este método de consulta espacial considera eficientemente o volume das caixas de borda das peças, em vez do volume realmente ocupado delas.Isso pode ser importante ao considerar cilindros, esferas, uniões e MeshParts que têm formas não-bloqueantes.Para casos em que a precisão é especialmente importante, use WorldRoot:GetPartsInPart() em vez disso, ou filtre adicionalmente os resultados deste método você mesmo.
Este método usa um objeto reutilizável para descrever porções reutilizáveis da consulta espacial, como uma lista de inclusão ou exclusão, o número máximo de peças a serem consultadas, o grupo de colisão a ser usado e se a consulta favorece o valor da peça interceptada sobre seu valor.
Parâmetros
A localização do centro do volume de caixa dado a ser consultado.
O tamanho do volume da caixa dada a ser consultado.
Contém porções reutilizáveis dos parâmetros de consulta espaciais.
Devolução
Um conjunto de BaseParts que correspondeu à consulta espacial.
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() retorna um conjunto de peças cujas caixas de vinculação se sobrepõem a uma esfera cujo volume é descrito usando o centro dado ( Vector3 ) e o raio (number).
Como enfatizado, este método de consulta espacial considera eficientemente o volume das caixas de borda das peças, em vez do volume realmente ocupado delas.Isso pode ser importante ao considerar cilindros, esferas, uniões e MeshParts que têm formas não-bloqueantes.Para casos em que a precisão é especialmente importante, use WorldRoot:GetPartsInPart() em vez disso, ou filtre adicionalmente os resultados deste método você mesmo.
Este método usa um objeto reutilizável para descrever porções reutilizáveis da consulta espacial, como uma lista de inclusão ou exclusão, o número máximo de peças a serem consultadas, o grupo de colisão a ser usado e se a consulta favorece o valor da peça interceptada sobre seu valor.
Parâmetros
A localização do centro do volume de esfera dado a ser consultado.
O raio do volume de esfera dado a ser consultado.
Contém porções reutilizáveis dos parâmetros de consulta espaciais.
Devolução
Um conjunto de BaseParts que correspondeu à consulta espacial.
GetPartsInPart
WorldRoot:GetPartsInPart() retorna um conjunto de peças cujo espaço ocupado é compartilhado com a peça dada (que deve existir no mesmo WorldRoot como as peças a serem consultadas).Este método pode ser usado em vez de BasePart:GetTouchingParts() e geralmente é uma escolha melhor.
Como observado, este método de consulta espacial considera o volume exato ocupado pela peça dada usando uma verificar / conferirde colisão geométrica completa.Como exemplo, uma peça côncava/hollow não corresponderá a peças queridas dentro dela a menos que elas realmente se sobreponham/toquem uma parte assim.Para volumes mais simples, considere usar WorldRoot:GetPartBoundsInBox() ou WorldRoot:GetPartBoundsInRadius(), pois são menos precisos, mas executam de forma mais eficiente.
Este método usa um objeto reutilizável para descrever porções reutilizáveis da consulta espacial, como uma lista de inclusão ou exclusão, o número máximo de peças a serem consultadas, o grupo de colisão a ser usado e se a consulta favorece o valor da peça interceptada sobre seu valor.
Parâmetros
A parte cujo volume deve ser verificado contra outras partes.
Contém porções reutilizáveis dos parâmetros de consulta espaciais.
Devolução
Um conjunto de BaseParts que correspondeu à consulta espacial.
IKMoveTo
Essa função move a peça especificada para o local especificado através de cinemática inversa em vez de movê-la diretamente para garantir que quaisquer articulações, constraints ou colisões em que a peça está participando permaneçam fisicamente satisfeitas.Atualmente, essa função só está disponível no Studio para plugins, pois atualmente conflita com a física de um jogo em execução.
Traduzir a rigidez é um número entre 0 e 1 que especifica quão agressivamente combinar a posição da peça com a posição da peça do alvo CFrame. Girar a rigidez é um número entre 0 e 1 que especifica quão agressivamente combinar a rotação da peça com a parte de rotação do CFrame alvo.
Por exemplo:
- Se a tradução de rigidez e a rotação de rigidez forem ambas iguais a 1, então a peça será movida exatamente para o CFrame alvo, independentemente de quaisquer restrições físicas que haja nela.
- Se a rigidez de tradução e a rigidez de rotação forem ambas iguais a 0,5, então a peça tentará se mover para exatamente o CFrame alvo, mas pode ser empurrada para fora do caminho por restrições físicas sobre ela.
- Se a tradução de rigidez e a rotação de rigidez forem ambas iguais a 0, então o CFrame alvo será ignorado e as restrições físicas serão resolvidas para o objeto na posição em que ele estava.
Parâmetros
A peça que está sendo movida.
A localização para mover a parte especificada.
Um número entre 0 e 1 especificando quão agressivamente combinar a posição da peça com a posição da peça do alvo CFrame.
Um número entre 0 e 1 especificando quão agressivamente combinar a rotação da peça com a parte de rotação do alvo CFrame.
Permite que você especifique quais objetos devem ser afetados pela resoluução física.
Devolução
Raycast
Lança um raio usando uma origem, direção e opcional RaycastParams .Se encontrar uma célula elegível BasePart ou Terrain , uma RaycastResult é retornada contendo os resultados da operação.Se nenhum objeto RaycastParams for fornecido, os padrões são usados (todas as peças são consideradas e Terrain água não é ignorada).
Observe que o comprimento ( magnitude ) do vetor direcional é importante, pois objetos/terreno mais distantes de sua comprimento não serão testados.Se você estiver usando um CFrame para ajudar a criar os componentes de raio, considere usar CFrame.LookVector como o vetor direcional e multiplique-o pela distância desejada, como mostrado no exemplo abaixo.O comprimento máximo do vetor de direção é 15.000 metros.
Este método não usa um ObjetoRay e sua origem e componentes de direção podem ser emprestados de Ray.Origin e Ray.Direction.
Parâmetros
O ponto de origem do raio.
O vetor direcional do raio. Observe que o comprimento desse vetor importa, pois as partes/terreno mais distantes de sua comprimento não serão testadas.
Um objeto usado para especificar a elegibilidade de hit na operação de raycast.Se não for fornecido, valores padrão são usados onde todas as peças são consideradas e Terrain água não é ignorada.
Devolução
Amostras de código
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
Devolução
Spherecast
Lança uma forma esférica em uma direção dada e retorna a primeira colisão com uma célula BasePart ou Terrain .Isso é análogo ao modo como WorldRoot:Raycast() lança um raio linear em uma direção para encontrar uma colisão, mas usa uma forma 3D em vez de um raio.
Ao contrário de WorldRoot:GetPartsInPart() , este método não detecta BaseParts que inicialmente intercepta a forma.
Se um golpe for detectado, um RaycastResult é retornado contendo a informação do golpe.A propriedade Distance representa a distância que a forma precisa percorrer para encontrar um acerto e a propriedade Position representa o ponto de intersecção que causa o acerto.
Este método lança um erro se forem passados inputs de raio ou direção inválidos.
Parâmetros
A posição inicial da forma esférica de lançamento.
O raio da forma esférica de lançamento em studs. O raio máximo é 256 studs.
Direção do shapecast, com a magnitude representando a distância máxima que a forma pode viajar. A distância máxima é 1024 studs.
Devolução
Amostras de código
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
Avança a simulação para peças no mundo para frente com base em um incremento de tempo especificado e em um conjunto opcional de BasePart.Quando um conjunto de peças é especificado, apenas essas peças serão simuladas e todas as outras peças no mundo serão tratadas como ancoradas.Quando este argumento é deixado de fora, todas as partes no mundo serão incluídas na simulação.O incremento de tempo especificado pode ser qualquer número positivo, com valores maiores aumentando o tempo de execução da função.Dependendo do valor do incremento de tempo, o sistema de física pode dividi-lo em múltiplos passos individuais para manter a precisão e a estabilidade da simulação.Mesmo que a função execute múltiplos passos de substituição, os resultados da simulação só serão vistos quando a função for concluída.Para visualizar os passos individuais de uma simulação, a função pode ser chamada uma vez por RenderStep através do evento RunService.RenderStepped.
Parâmetros
A quantidade de tempo que será simulada. Este argumento deve ser um número positivo. Valores maiores aumentarão o tempo de execução desta função.
배열 opcional de peças que serão simuladas. Este conjunto deve conter instâncias do tipo BasePart ; quaisquer outros tipos serão ignorados.
Devolução
Amostras de código
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)