Workspace

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Não criável
Serviço

A tarefa principal de Workspace é manter objetos que existem no mundo 3D, efetivamente BaseParts e Attachments .Enquanto esses objetos são descendentes de Workspace, eles serão ativos.Para BaseParts , isso significa que eles serão renderizados e interagirão fisicamente com outras partes e o mundo.Para Attachments , isso significa que objetos decorados para eles, como ParticleEmitters , Beams e BillboardGuis , renderizarão.

Entender esse comportamento é importante, pois significa que objetos podem ser removidos de Workspace quando não forem necessários.Por exemplo, o mapa Models pode ser removido quando um mapa diferente está sendo reproduzido.Objetos que não são imediatamente necessários no mundo 3D são geralmente armazenados em ReplicatedStorage ou ServerStorage .

Em seu papel como o detentor de objetos 3D ativos, Workspace inclui uma série de funções úteis relacionadas a peças, suas posições e juntas entre elas.

Acessando o Ambiente de Trabalho

Workspace pode ser acessado de várias maneiras, todas as quais são válidas.

  • workspace
  • game:GetService("Workspace")
  • game.Workspace
Notas

Resumo

Propriedades

Propriedades herdados de ModelPropriedades herdados de PVInstance

Métodos

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

    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.

  • MoveTo(position : Vector3):()

    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.

  • RemovePersistentPlayer(playerInstance : Player):()

    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.

  • ScaleTo(newScaleFactor : number):()

    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.

  • TranslateBy(delta : Vector3):()

    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.

Métodos herdados de PVInstance

Eventos

Propriedades

AirDensity

Ler Parallel

A densidade de ar de nível de chão ( Y de 0) na unidade RMU/stud³ (veja Unidades Roblox ), usada para calcular a força aerodinâmica se Workspace.FluidForces é Experimental.O padrão corresponde à densidade de ar de nível do mar realista na temperatura e pressão padrão.A densidade do ar diminui à medida que a altitude Y aumenta, atingindo 5% do valor do nível de solo em 100.000 metros.Abaixo de Y de 0, a densidade do ar é fixada no valor de entrada.

AllowThirdPartySales

Não replicado
Ler Parallel

Essa propriedade Workspace determina se os recursos criados por outros usos podem ser vendidos no jogo.

O que são vendas de terceiros?

Quando este valor é falso, como é padrão, apenas recursos criados pelo criador do local (seja um jogador ou um grupo) e o Roblox podem ser vendidos usando MarketplaceService.

Na maioria dos casos, os jogos não precisam vender recursos de terceiros.No entanto, alguns jogos, como salas de troca, requerem essa funcionalidade e, portanto, existem como uma opção de opt-in.

Que produtos de terceiros posso vender?

Observe, produtos de desenvolvedor só podem ser vendidos no jogo com o qual estão associados, independentemente do que AllowThirdPartySales esteja definido.Essa propriedade afeta passes de jogo e roupas.

AvatarUnificationMode

Não scriptável
Ler Parallel

ClientAnimatorThrottling

Ler Parallel

Especifica o Enum.ClientAnimatorThrottlingMode para usar para o cliente local.

Quando ativado, as animações em instâncias remotamente simuladas Model começarão a diminuir. O limitador calcula a intensidade de limitação usando:

  • Visibilidade de um Model em relação ao Camera
  • FPS no jogo
  • Número de animações ativas

CurrentCamera

Não replicado
Ler Parallel

O objeto Camera sendo usado pelo jogador local.

Como usar a Câmera Atual

Ao procurar o Objetode um cliente Camera, use essa propriedade em vez de procurar um filho chamado Workspace chamado "Câmera".

Quando você define essa propriedade, todos os outros objetos Camera na Workspace são destruídos, incluindo o anterior CurrentCamera.Se você definir essa propriedade para nil ou para uma câmera que não é descendente do Espaço de Trabalho (ou o CurrentCamera está destruído de outra forma), uma nova Camera será criada e atribuída.Evite esses cenários, pois destruir a câmera pode ter consequências não intencionais.

Para mais informações, veja Programando a Câmera.

DistributedGameTime

Não replicado
Ler Parallel

A quantidade de tempo, em segundos, que o jogo está rodando.

Apesar do título, esse valor não está atualmente "Distribuído" entre o cliente e o servidor.Em vez disso, no servidor representa quanto tempo o servidor está em execução.No cliente, representa quanto tempo o cliente está conectado ao servidor.

Desenvolvedores não devem confiar no comportamento acima, e é possível que essa propriedade seja sincronizada entre clientes e o servidor no futuro.

Aqueles que buscam o tempo desde que o programa começou a funcionar devem usar a função 'time' em vez disso.Veja abaixo uma comparação entre o DistributedGameTime e suas alternativas.


local Workspace = game:GetService("Workspace")
print(Workspace.DistributedGameTime) -- Time the game started running
print(os.time()) -- Time since epoch (1 January 1970, 00:00:00) UTC
print(tick()) -- Time since epoch (1 January 1970, 00:00:00) system time
print(time()) -- Time the game started running
print(elapsedTime()) -- Time since Roblox started running

FallHeightEnabled

Segurança do plugin
Ler Parallel

FallenPartsDestroyHeight

Segurança do plugin
Ler Parallel

Essa propriedade determina a altura em que o Roblox Engine remove automaticamente quedas BaseParts e seus ancestrais Models de Workspace por meio de parentalidade deles para nil .Isso é para evitar que peças que caíram do mapa continuem caindo para sempre.

Se uma peça removida devido a esse comportamento for a última peça em um Model, esse modelo também será removido.Isso se aplica a todos os ancestrais de modelo da peça.

Essa propriedade é limitada entre -50,000 e 50,000 porque BaseParts não simula ou renderiza corretamente a uma grande distância da origem devido às imprecisões de ponto flutuante.

Essa propriedade pode ser lida por scripts, mas só pode ser definida por plugins, barra de comando ou janela de propriedades no Studio.

FluidForces

Não scriptável
Ler Parallel

Com essa propriedade ativada, o motor de física calcula forças aerodinâmicas em BaseParts cuja propriedade EnableFluidForces seja verdadeira.O padrão, Default , desabilita as forças aerodinâmicas.Observe que essa propriedade não pode ser definida por meio de scripts e, em vez disso, deve ser ativada no Studio.

GlobalWind

Ler Parallel

Essa propriedade especifica a direção e a força que o vento sopra através da experiência, afetando a grama do terreno, nuvens dinâmicas e partículas.Veja o artigo Vento Global para detalhes.

Gravity

Ler Parallel

Determina a aceleração devido à gravidade aplicada ao queda BaseParts .Este valor é medido em studs por segundo quadrado e, por padrão, é definido como 196,2 studs/segundo 2.Ao alterar esse valor, os desenvolvedores podem simular os efeitos de gravidade mais baixa ou maior no jogo.

Amostras de código

This script creates a touch pad in the workspace that, when touched, will reduce the game's gravity. Activating the pad again will switch back to normal gravity.

Low Gravity Button

local MOON_GRAVITY_RATIO = 1.62 / 9.81
local DEFAULT_GRAVITY = 196.2
local MOON_GRAVITY = DEFAULT_GRAVITY * MOON_GRAVITY_RATIO
-- Create a touch pad
local pad = Instance.new("Part")
pad.Size = Vector3.new(5, 1, 5)
pad.Position = Vector3.new(0, 0.5, 0)
pad.Anchored = true
pad.BrickColor = BrickColor.new("Bright green")
pad.Parent = workspace
-- Listen for pad touch
local enabled = false
local debounce = false
local function onPadTouched(_hit)
if not debounce then
debounce = true
enabled = not enabled
workspace.Gravity = enabled and MOON_GRAVITY or DEFAULT_GRAVITY
pad.BrickColor = enabled and BrickColor.new("Bright red") or BrickColor.new("Bright green")
task.wait(1)
debounce = false
end
end
pad.Touched:Connect(onPadTouched)

IKControlConstraintSupport

Não scriptável
Ler Parallel

Habilita o suporte a restrições para IKControls.O valor Default é o mesmo que Enabled.Se desativado, os IKControls ignoram as restrições de física.Veja IKControl para detalhes adicionais.

InsertPoint

Não replicado
Ler Parallel

MeshPartHeadsAndAccessories

Não scriptável
Ler Parallel

Define se as cabeças e acessórios de personagens devem ser baixados como MeshParts .O valor Default é o mesmo que Enabled.Se esta característica estiver habilitada, os avatares integrados usarão MeshParts para a cabeça e acessórios do personagem.

ModelStreamingBehavior

Não scriptável
Ler Parallel

MoverConstraintRootBehavior

Não scriptável
Ler Parallel

Controla a lógica usada para selecionar a parte raiz de montagem para mecanismos que usam qualquer uma das seguintes restrições:

Quando esta propriedade é definida como Enum.MoverConstraintRootBehaviorMode.Enabled , essas restrições serão ignoradas ao selecionar a parte raiz da montagem se a restrição não transmitir forças entre duas partes (alguns exemplos são AngularVelocity.ReactionTorqueEnabled definidos como false , AlignPosition.ReactionForceEnabled definidos como false ou AlignOrientation.Mode definidos como Enum.OrientationAlignmentMode.OneAttachment ).

Quando esta propriedade é definida como Enum.MoverConstraintRootBehaviorMode.Disabled, essas restrições podem ser erroneamente consideradas ao selecionar a parte raiz da montagem, o que leva a uma propriedade de rede inconsistente e atrasos ao adicionar essas restrições a um mecanismo.

PathfindingUseImprovedSearch

Não scriptável
Ler Parallel

PhysicsImprovedSleep

Não scriptável
Ler Parallel

PhysicsSteppingMethod

Não scriptável
Ler Parallel

Define como o solucionador avançará a simulação física no tempo.Essa opção não é scriptável e deve ser definida a partir da propriedade PhysicsSteppingMethod de Workspace dentro do Studio.Veja Adaptive Timestepping para detalhes.


<th>Descrição</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>Adaptativo</b></td>
<td>O motor tenta atribuir taxas de simulação otimais para montagens individuais de 240 Hz, 120 Hz ou 60 Hz.Essa configuração é otimizada para performance.</td>
</tr>
<tr>
<td><b>Corrigido</b></td>
<td>Todas as montagens simuladas dentro do espaço de trabalho avançarão em 240 Hz. Esta opção é melhor para estabilidade e precisão de simulação ideais.</td>
</tr>
<tr>
<td><b>Padrão</b></td>
<td>O padrão atual é <b>Corrigido</b>.</td>
</tr>
</tbody>
Opção

Observe que quando assemblagens de diferentes taxas de simulação se conectam via Constraints ou colisões, o mecanismo combinado padrão será a taxa de simulação mais alta para estabilidade.

PlayerCharacterDestroyBehavior

Não scriptável
Ler Parallel

PrimalPhysicsSolver

Não scriptável
Ler Parallel

RejectCharacterDeletions

Não scriptável
Ler Parallel

RenderingCacheOptimizations

Não scriptável
Ler Parallel

ReplicateInstanceDestroySetting

Não scriptável
Ler Parallel
Ler Parallel

SandboxedInstanceMode

Não scriptável
Ler Parallel

SignalBehavior

Não scriptável
Ler Parallel

Essa propriedade determina se os manipuladores de eventos serão retomados imediatamente quando o evento for disparado ou adiados e, em seguida, retomados em um ponto de retomada posterior.Os pontos de retomada atualmente incluem:

Para mais informações, veja Eventos adiados.

StreamOutBehavior

Não scriptável
Ler Parallel

Os controles StreamOutBehavior controlam onde o conteúdo será descarregado a partir do ReplicationFocus com base nas condições de memória do dispositivo ou com base no raio de streaming.

Veja também:

StreamingEnabled

Segurança do plugin
Ler Parallel

A propriedade StreamingEnabled determina se o streaming de conteúdo do jogo está habilitado para o local.Essa propriedade não é scriptável e, portanto, deve ser definida no objeto Área de Trabalho no Studio.

Veja também:

StreamingIntegrityMode

Não scriptável
Ler Parallel

Se a instância streaming estiver ativada, uma experiência pode se comportar de maneiras não intencionais se o personagem de um jogador se mover para uma região do mundo que não foi transmitida para seu cliente.A funcionalidade de integridade de streaming oferece uma maneira de evitar essas situações potencialmente problemáticas.

StreamingMinRadius

Não scriptável
Ler Parallel

A propriedade StreamingMinRadius indica o raio ao redor do personagem do jogador ou o atual ReplicationFocus em que o conteúdo será transmitido com a maior prioridade.Padrão para 64 metros.

Deve-se ter cuidado ao aumentar o raio mínimo padrão, pois isso exigirá mais memória e mais largura de banda do servidor em detrimento de outros componentes.

Veja também:

StreamingTargetRadius

Não scriptável
Ler Parallel

A propriedade StreamingTargetRadius controla a distância máxima de distância do personagem do jogador ou do atual ReplicationFocus em que o conteúdo será transmitido.Padrão para 1024 metros.

Observe que o motor é permitido manter conteúdo previamente carregado além do raio alvo, permitindo a memória.

Veja também:

Terrain

Somente leitura
Não replicado
Ler Parallel

Essa propriedade é uma referência ao objeto Terrain que foi pai do objeto Workspace.

Terrain object within the Workspace hierarchy

Veja Terreno Ambiental para mais informações.

TouchEventsUseCollisionGroups

Não scriptável
Ler Parallel

TouchesUseCollisionGroups

Não scriptável
Ler Parallel

Essa propriedade determina se parts em diferentes grupos definidos para não colidirem ignorarão colisões e eventos de toque.Por padrão, o valor desta propriedade é definido como false .

Quando essa propriedade estiver habilitada, peças em diferentes grupos definidas para não colidirem também ignorarão a propriedade CanTouch, semelhante ao modo como BasePart.CanCollide é ignorado.Para mais informações sobre o comportamento do CanTouch, visite sua página de propriedade.

Métodos

GetNumAwakeParts

Escrever Parallel

Retorna o número de BaseParts que são considerados fisicamente ativos, devido a estar recentemente sob a influência da física.

Essa função fornece uma medida de quantos BaseParts estão sendo influenciados por, ou recentemente sob a influência de, forças físicas.


local Workspace = game:GetService("Workspace")
print(Workspace:GetNumAwakeParts())

Dormindo vs Partes Acordadas

Para garantir um bom performance, o Roblox define BaseParts em que a física não está sendo aplicada a um estado "dormindo".BaseParts com BasePart.Anchored definido como verdadeiro, por exemplo, sempre dormirá, pois a física não se aplica a eles.Quando uma força é aplicada a um não ancorado BasePart, um estado "Despertado" será aplicado.Enquanto um BasePart está acordado, o motor de física do Roblox fará cálculos contínuos para garantir que as forças físicas interajam corretamente com a peça.Uma vez que o BasePart não está mais sujeito a forças físicas, ele voltará a um estado de 'sono'.


Devolução

O número de peças acordadas.

GetPhysicsThrottling

Escrever Parallel

Retorna um integral, entre 0 e 100, que representa a porcentagem de tempo real em que a simulação de física está sendo atualmente limitada.

Essa função pode ser usada para determinar se, e até que ponto, a restrição de física está ocorrendo.

O que é o estrangulamento da física?

O atraso de física ocorre quando o motor de física detecta que não pode acompanhar o jogo em tempo real.Quando a física está sendo limitada, ela será atualizada com menos frequência, fazendo com que BaseParts pareça se mover mais lentamente.

Sem aceleração, a simulação de física ficaria ainda mais atrás em des sincronia com o jogo.Isso pode levar a taxas de quadro mais baixas e outro comportamento indesejável.

Objetos associados a Humanoids são isentos de aceleração física.

Veja também Workspace:SetPhysicsThrottleEnabled() .

Demonstrando a restrição de física

Desenvolvedores devem sempre evitar criar locais que sobrecarreguem o motor de física, pois isso leva a uma experiência subpar para os jogadores.Aqueles que desejam simular o estrangulamento da física para fins de pesquisa, no entanto, precisam apenas criar muito Parts rapidamente.


local Workspace = game:GetService("Workspace")
local i = 0
while true do
i += 1
if i % 5 == 0 then
task.wait()
end
local part = Instance.new("Part", Workspace)
end

Devolução

A porcentagem de tempo real em que a simulação de física está sendo limitada no momento.

GetRealPhysicsFPS

Escrever Parallel

Retorna o número de quadros por segundo em que a física está sendo simulada no momento.

Usando GetRealPhysicsFPS para combater exploradores

Um uso comum dessa função é detectar se os exploiters estão aumentando sua taxa de quadros de física locais para se mover mais rápido.Isso é geralmente feito comparando o resultado retornado pelo GetRealPhysicsFPS de um cliente com um máximo que não será violado em situações normais (geralmente 65 ou 70).Se esse limite for violado, os desenvolvedores podem usar a função Player:Kick() para remover esse Player do jogo.É importante lembrar que, embora essa prática possa ser eficaz às vezes, as medidas anti-exploiter do lado do cliente nunca são 100% confiáveis.


Devolução

Retorna o número de quadros por segundo em que a física está sendo simulada no momento.

Amostras de código

Speed exploiters commonly increase their local physics FPS in order to increase their character speed. This can be detected from a LocalScript by checking if the player's physics FPS is over the maximum:

Workspace:GetRealPhysicsFPS

local Players = game:GetService("Players")
local player = Players.LocalPlayer
while task.wait(1) do
if workspace:GetRealPhysicsFPS() > 65 then
player:Kick()
end
end

GetServerTimeNow

Escrever Parallel

GetServerTimeNow() retorna a melhor aproximação do cliente do tempo atual no servidor.Isso é útil para criar experiências sincronizadas, pois cada cliente obterá os mesmos resultados, independentemente de sua zona de tempo ou do relógio local.

Isso retorna um timestamp Unix, semelhante a os.time(), que pode ser usado com os.date() ou com DateTime.fromUnixTimestamp().

O tempo de retorno do timestamp por esta função é suavizado para que:

  • É monótono; seu valor nunca diminuirá.
  • Ela se move na mesma taxa que o relógio local para dentro de 0,6%.

GetServerTimeNow() é caro de chamar em comparação com DateTime.now() e é menos preciso que os.clock() , então deve ser usado para garantir que um evento comece no tempo real do mundo ou para ajustar as coisas periodicamente para manter uma série de eventos sincronizados.

Essa função depende do servidor, então chamá-la de um cliente que não está conectado vai gerar um erro.Observe também que essa função não é adequada para coisas como recompensas cronometradas, pois não é segura em comparação com o rastreamento de tais temporizadores no servidor.

Veja também:


Devolução

O timestamp estimado do Unix no servidor.

JoinToOutsiders

()

Essa função cria juntas entre as peças especificadas Parts e quaisquer peças tocantes dependendo das superfícies das peças e do modo de criação de junta especificado.

Essa função cria juntas entre as Peças especificadas e quaisquer superfícies de contato planas, dependendo das superfícies das peças e do modo de criação de junta especificado.

  • Cola, Studs, Inlets, Universais, Solda e Superfícies lisas todas criarão instâncias de solda.
  • Esferas não vão se soldar à superfície de qualquer coisa. Os lados arredondados dos cilindros não vão se soldar à superfície, mas os lados planos dos cantos vão.
  • As superfícies de dobradiça e motor ainda criarão instâncias conjuntas Rotate e RotateP independentemente da forma da peça.

O primeiro parâmetro é um array de BaseParts .Junções só serão criadas entre as partes no array e não no matriz / lista.Junções não serão criadas entre as partes no matriz / lista.

O segundo parâmetro é um Enum.JointCreationMode que determina como as articulações serão criadas.Passar em qualquer valor de enum, Enum.JointCreationMode.All ou Enum.JointCreationMode.Surface, tem o mesmo comportamento que se iguala a Entrar Sempre

Essa função é usada pela ferramenta Mover do Roblox Studio quando o usuário termina de mover uma seleção.Em conjunto com Plugin:GetJoinMode() e Workspace:UnjoinFromOutsiders(), pode ser usado para manter a funcionalidade de junção ao desenvolver ferramentas de construção de estúdio personalizadas.Veja os snippets abaixo para um exemplo.


local Workspace = game:GetService("Workspace")
-- Movimento de seleção finalizado; faça junções
local function finishedMovingParts(parts)
local joinMode = Plugin:GetJoinMode()
Workspace:JoinToOutsiders(parts, joinMode)
end

local Workspace = game:GetService("Workspace")
-- Começou a mover uma seleção; quebrar juntas
local function startMovingParts(parts)
Workspace:UnjoinFromOutsiders(parts)
end

Parâmetros

objects: Instances

Um array de BaseParts para quem os joints devem ser feitos.

Valor Padrão: ""

O Enum.JointCreationMode a ser usado. Passar em Enum.JointCreationMode.All ou Enum.JointCreationMode.Surface tem o mesmo comportamento que se iguala a Entrar Sempre.

Valor Padrão: ""

Devolução

()

PGSIsEnabled

Retorna true se o jogo tiver o solucionador de física PGS ativado.

Como Workspace.PGSPhysicsSolverEnabled não pode ser acessado por scripts, a função PGSIsEnabled permite que os desenvolvedores digam qual solucionador de física o jogo está usando.


Devolução

Verdadeiro se o solucionador PGS estiver habilitado.

UnjoinFromOutsiders

()

Quebra todas as articulações entre o especificado BaseParts e outro BaseParts.

Esta função requer um array de BaseParts .Observe, as articulações não serão quebradas entre esses BaseParts (uns aos outros), apenas entre esses BaseParts e outros BaseParts não na matriz / lista.

Essa função é usada pela ferramenta Mover do Roblox Studio quando o usuário começa a mover uma seleção.Em conjunto com Plugin:GetJoinMode() e Workspace:JoinToOutsiders(), pode ser usado para manter a funcionalidade de junção ao desenvolver ferramentas de construção personalizadas do Studio.Veja os snippets abaixo para um exemplo.


local Workspace = game:GetService("Workspace")
-- Finished moving a selection; make joints
local function finishedMovingParts(parts)
local joinMode = Plugin:GetJoinMode()
Workspace:JoinToOutsiders(parts, joinMode)
end

local Workspace = game:GetService("Workspace")
-- Started moving a selection; break joints
local function startMovingParts(parts)
Workspace:UnjoinFromOutsiders(parts)
end

Parâmetros

objects: Instances

Um array de BaseParts para quem os joints devem ser quebrados.

Valor Padrão: ""

Devolução

()

ZoomToExtents

()
Segurança do plugin

Posiciona e amplia o Workspace.CurrentCamera para mostrar a extensão de BaseParts atualmente no Workspace.

Essa função foi usada no botão, agora removido, 'Zoom To Extents' no Roblox Studio.Ela exibe comportamento semelhante ao funcionalidade'Zoom To' (F atalho), no entanto mostra as extremidades do Workspace em vez do Objetoatualmente selecionado.

Essa função não pode ser usada em scripts, mas funcionará na barra de comando ou plugins.


Devolução

()

Eventos

PersistentLoaded

Este evento dispara sempre que um jogador foi enviado todos os modelos persistentes atuais e modelos atômicos sem peças.O parâmetro player indica qual jogador recebeu todas as instâncias aplicáveis.

Observe que o carregamento da experiência ocorre antes do carregamento persistente e o disparo do evento DataModel.Loaded não indica que todos os modelos persistentes estejam presentes.

Parâmetros

player: Player