Propriedades e atributos

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

Fazer experiências interativas frequentemente significa manipular propriedades e atributos de objetos:

  • Propriedades fazem parte da classe de objeto.Por exemplo, os controles de propriedade BasePart.Anchored controlam a física para a peça.Em uma experiência de pista e campo, você pode querer ancorar um disco ou jabalina no momento em que ele pousa para que os jogadores tenham um indicador visual de quão longe ele viajou.

  • Atributos são essencialmente propriedades personalizadas que você define.Por exemplo, o projeto de referência Planta usa atributos para definir o preço de compra das sementes e o tamanho máximo da planta que um vaso pode conter.

Ordem de replicação

Antes de começar a recuperar e manipular objetos, você deve ter uma compreensão da ordem de replicação.

O motor do Roblox não garante a ordem em que os objetos são replicados do servidor para o cliente, o que torna o método Instance:WaitForChild() essencial para acessar objetos em scripts de cliente, especialmente objetos no Workspace.Ainda assim, alguns aspectos do processo são previsíveis:

  1. O cliente carrega o conteúdo de ReplicatedFirst, como uma tela de carregamento, recursos e scripts.

  2. LocalScripts (e Scripts com um RunContext de Client ) na executarReplicatedFirst .Esses scripts podem obter objetos com segurança de ReplicatedFirst sem usar WaitForChild():


    -- Segura
    local ReplicatedFirst = game:GetService("ReplicatedFirst")
    local LoadingScreen = require(ReplicatedFirst.LoadingScreen)

    Esses scripts não podem obter objetos de outros serviços de forma segura, porque eles podem não ter sido carregados ainda:


    -- Não seguro
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local PickupManager = require(ReplicatedStorage.PickupManager)

    Você pode usar em esses scripts para obter objetos de outros serviços, mas fazendo isso anula os benefícios de usar .

  3. O cliente continua carregando o resto da experiência.

  4. Quando terminar, o evento game.Loaded ocorre e game:IsLoaded() retorna verdadeiro.

  5. LocalScripts em Players.Player.PlayerScripts (copiado de StarterPlayerScripts ) executar, bem como o cliente Scripts em ReplicatedStorage .Esses scripts podem obter objetos com segurança de ReplicatedStorage sem usar WaitForChild().

  6. O modelo do jogador Character aparece na experiência.

  7. LocalScripts em Workspace.Character (copiado de StarterCharacterScripts ) executar.

Se a sua experiência usa streaming de instância ( Workspace.StreamingEnabled ), alguns ou a maioria dos objetos pode não ter sido carregada no espaço de trabalho, então usar WaitForChild() para acessar objetos do espaço de trabalho se torna uma medida de segurança ainda mais importante.Em particular, veja Stream in e controles de streaming por modelo adicionais para informações adicionais sobre carregamento e ajuste do comportamento de streaming.

Obter objetos

O primeiro passo para modificar propriedades e atributos de objetos é obter uma referência ao Objeto.A solução mais simples é fazer do script um filho do objeto no Explorer e usar script.Parent para referenciar o Objeto.

A script parented to a model in the Explorer.

local sign = script.Parent

A solução mais universal é obter o objeto de um serviço usando métodos como Instance:FindFirstChild() ou Instance:WaitForChild() .

A Model within a Folder in ReplicatedStorage.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local signsFolder = ReplicatedStorage:WaitForChild("Signs")
local sign = signsFolder:WaitForChild("InteractiveSign")

Modificar propriedades

As propriedades são fáceis de acessar — basta usar um . após a referência do objeto — embora se você estiver trabalhando com um modelo, talvez precise escolher uma parte individual em vez do próprio modelo.

A Model within ReplicatedStorage.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local chair = ReplicatedStorage:WaitForChild("Chair")
chair.LeftArmRest.Size = Vector3.new(10, 1, 10)

Crie atributos

Embora você possa criar atributos programaticamente, a solução mais comum é criá-los com valores padrão na interface do usuário do Studio.Então você pode usar scripts para modificar seus valores em resposta às ações do jogador.

A script within a folder in ReplicatedStorage.

Para obter informações sobre a criação de atributos no Studio, veja Atributos de instância.

Defina os atributos

Para modificar o valor de um atributo, chame Instance:SetAttribute() com um nome e um valor.

Criar ou Modificar Atributo

local cabbage = script.Parent
cabbage:SetAttribute("Harvestable", true)

Se o atributo ainda não existe, este método cria-o.

Obter valores de atributo

Para obter o valor de um atributo existente, chame Instance:GetAttribute() na instância.

Obter o valor do atributo

local cabbage = script.Parent
cabbage:SetAttribute("Harvestable", true)
local isHarvestable = cabbage:GetAttribute("Harvestable")
print(isHarvestable) --> true

Da mesma forma, você pode obter todos os atributos chamando Instance:GetAttributes(). Este método retorna um dicionário de pares de chave-valor.

Obtenha todos os atributos

local cabbage = script.Parent
local cabbageAttributes = cabbage:GetAttributes()
print(cabbageAttributes.GrowthRate) --> 2
for k, v in cabbageAttributes do
print(k, v)
end

Atributos de exclusão

Para excluir um atributo, defina seu valor para nil .

Excluir atributo

local cabbage = script.Parent
cabbage:SetAttribute("GrowthRate", nil)

Detectar alterações

Existem várias maneiras de ouvir mudanças em propriedades e atributos:

Devido às informações mínimas que esses eventos e métodos passam como parâmetros, todos eles são uma boa opção para funções anônimas, especialmente Instance:GetPropertyChangedSignal() e Instance:GetAttributeChangedSignal().Para aprender mais sobre funções anônimas e trabalhar com eventos, veja Eventos.

Ouça as mudanças

local cabbage = script.Parent
-- Funções locais
local function onAnyPropertyChange(property)
-- Ignorar alterações em atributos
if property ~= "Attributes" then
print(property) -->Nome
print(cabbage[property]) --> Repolho1
end
end
local function onAnyAttributeChange(attribute)
print(attribute) --> Crescer, Taxa de Crescimento
print(cabbage:GetAttribute(attribute)) --> falso, 3
end
-- Ouça mudanças e conecte-se a funções locais
cabbage.Changed:Connect(onAnyPropertyChange)
cabbage.AttributeChanged:Connect(onAnyAttributeChange)
-- Ouça mudanças e conecte-se a funções anônimas
cabbage:GetPropertyChangedSignal("Name"):Connect(function()
print(cabbage.Name) --> Repolho1
end)
cabbage:GetAttributeChangedSignal("GrowthRate"):Connect(function()
print(cabbage:GetAttribute("GrowthRate")) --> 3
end)
-- Incêndios Alterados e GetPropertyChangedSignal()
cabbage.Name = "Cabbage1"
-- Incêndios Alterados e Atributo Mudado
cabbage:SetAttribute("Grow", false)
-- Incêndios alterados, AttributeChanged e GetAttributeChangedSignal()
cabbage:SetAttribute("GrowthRate", 3)