Interaktive Erlebnisse zu erstellen, bedeutet oft, Objekt-Eigenschaften und Attribute zu manipulieren:
Eigenschaften sind ein Teil der Objektklasse. Zum Beispiel steuert die BasePart.Anchored Eigenschaft die Physik für das Teil. In einem Track-and-Field-Erlebnis möchten Sie vielleicht einen Diskus oder einen Javelin so ankeren, dass er sofort nach dem Landen einen visuellen Indikator hat, wie weit er gereist ist, damit die Spieler einen visuellen Indikator haben, wie weit er gereist ist.
Attribute sind im Grunde benutzerdefinierte Eigenschaften, die du definierst. Zum Beispiel verwendet das Planten-Projekt Attribut, um den Kaufpreis für Samen und die maximale Pflanzengröße zu definieren, die ein Topf enthalten kann.
Replikations-Befehl
Bevor du Objekte abrufen und manipulieren kannst, musst du ein Verständnis von Replikationsordnung haben.
Die Roblox-Engine garantiert nicht, in welcher Reihenfolge Objekte vom Server zum Client repliziert werden, was die Instance:WaitForChild() Methode für den Zugriff auf Objekte in Client-Skripts unerlässlich macht, insbesondere Objekte in der Workspace . Alle Aspekte des Prozesses sind jedoch vorhersehbar:
Der Client lädt die Inhalte von ReplicatedFirst, wie z. B. einen Ladebildschirm, Assets und Skripte.
Class.LocalScript|LocalScripts (und Scripts mit einem RunContext von 0> Enum.RunContext.Client|Client0>) in LocalScripts3> ausführen. Diese Skripte können
-- Sicherlocal ReplicatedFirst = game:GetService("ReplicatedFirst")local LoadingScreen = require(ReplicatedFirst.LoadingScreen)
Diese Skripte können keine sicheren Objekte von anderen Diensten erhalten, da sie noch nicht geladen wurden:
-- Nicht sicherlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local PickupManager = require(ReplicatedStorage.PickupManager)
Du kannst diese Skripte verwenden, um Objekte von anderen Diensten zu erhalten, aber dadurch werden die Vorteile der Verwendung von ReplicatedFirst nicht wahrgenommen.
Der Client lädt den Rest der Erlebnisweiter.
Wenn es fertig ist, wird das Ereignis game.Loaded ausgelöst und game:IsLoaded() gibt eine Rückgabe zurück.
LocalScripts in StarterPlayerScripts ausführen, sowie client Scripts in 0> Class.ReplicatedStorage0> . Diese Skripte können sicher Objekte von 3> StarterPlayerScripts3> und LocalScripts6> erhalten, ohne 9> WaitFor
Das Spieler:inCharacter wird in der Erlebnisgeneriert.
LocalScripts in StarterCharacterScripts ausführen.
Wenn deine Erfahrung Instanz-Streaming verwendet ( Workspace.StreamingEnabled ) , einige oder alle Objekte könnten nicht in den Arbeitsbereich geladen worden sein, so dass die Verwendung von WaitForChild() , um auf Arbeitsbereich-Objekte zuzugreifen, eine noch wichtigere Sicherheitsmaßnahme geworden ist. In
Objekte erhalten
Der erste Schritt zum Ändern von Objekt属性en und - Attribute ist es, eine Verweis auf das Objekt zu erhalten. Die einfachste Lösung ist es, das Skript als Kind des Objekts im Explorer zu machen und script.Parent zu verwenden, um das Objekt zu referenzieren.
local sign = script.Parent
Die universelle Lösung ist es, das Objekt von einem Dienst mit Methoden wie Instance:FindFirstChild() oder Instance:WaitForChild() zu erhalten.
local ReplicatedStorage = game:GetService("ReplicatedStorage")local signsFolder = ReplicatedStorage:WaitForChild("Signs")local sign = signsFolder:WaitForChild("InteractiveSign")
Eigenschaften ändern
Eigenschaften sind einfach auf Zugriff zuzugreifen — verwenden Sie einfach ein . nach der Objekt-Referenz — obwohl, wenn Sie mit einem Modell arbeiten, möglicherweise eine einzelne Teil wählen müssen, anstatt das Modell selbst.
local ReplicatedStorage = game:GetService("ReplicatedStorage")local chair = ReplicatedStorage:WaitForChild("Chair")chair.LeftArmRest.Size = Vector3.new(10, 1, 10)
Attribute erstellen
Obwohl Sie Attribute programmieren können, ist die häufigste Lösung, sie mit Standardwerten in der Benutzeroberfläche von Studio zu erstellen. Dann können Sie Skripte verwenden, um ihre Werte in der Reaktion auf Benutzeraktionen zu ändern.
For information on creating attributes in Studio, see Instanz-Attributs-.
Attribute einstellen
Um den Wert eines Attributs zu ändern, rufe Instance:SetAttribute() mit einem Namen und einem Wert auf.
Eigenschaften erstellen oder ändern
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)
Wenn das Attribut nicht bereits existiert, erstellt diese Methode es.
Attribute-Werte abrufen
Um den Wert eines bestehenden Attributs zu erhalten, rufen Sie Instance:GetAttribute() auf der Instanz.
Holen Sie sich den Attribute-Wert
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)local isHarvestable = cabbage:GetAttribute("Harvestable")print(isHarvestable) --> true
Ebenso können Sie alle Attribute erhalten, indem Sie Instance:GetAttributes() aufrufen. Diese Methode gibt ein Wörterbuch von Schlüsselwertenpaaren zurück.
Hol dir alle Attribute
local cabbage = script.Parentlocal cabbageAttributes = cabbage:GetAttributes()print(cabbageAttributes.GrowthRate) --> 2for k, v in cabbageAttributes doprint(k, v)end
Attribute löschen
Um ein Attribut zu löschen, setzen Sie seinen Wert auf null.
Attribut löschen
local cabbage = script.Parentcabbage:SetAttribute("GrowthRate", nil)
Änderungen erkennen
Es gibt mehrere Möglichkeiten, auf Änderungen an Eigenschaften und Attributen zu hören:
Die Instance.Changed -Ereignisliste hört auf Änderungen an jeder Eigenschaft (einschließlich Attribute) und überträgt den Namen der geänderten Eigenschaft als Parameter.
Die Instance.AttributeChanged -Ereignisliste hört auf Änderungen an jedem Attribut und übermittelt den Namen des geänderten Attributs als Parameter.
Die Methode Instance:GetPropertyChangedSignal() lässt Sie auf Änderungen an einer Eigenschaft zuhören und keine Argumente übermitteln.
Die Instance:GetAttributeChangedSignal() Methode ermöglicht es Ihnen, auf Änderungen an einem Attribut zu hören, und übermittelt keine Parameter.
Aufgrund der minimalen Informationen, die diese Ereignisse und Methoden als Argumente übergeben, sind alle von ihnen gute Anpassungen für anonyme Funktionen, insbesondere Instance:GetPropertyChangedSignal() und Instance:GetAttributeChangedSignal(). Um mehr über anonyme Funktionen und das Arbeiten mit Ereignissen zu erfahren, siehe Ereignisse.
Änderungen hören
local cabbage = script.Parent
-- Lokale Funktionen
local function onAnyPropertyChange(property)
-- Änderungen an Attributen ignorieren
if property ~= "Attributes" then
print(property) --> Name
print(cabbage[property]) --> Kohl1
end
end
local function onAnyAttributeChange(attribute)
print(attribute) --> Wachstum, Wachstumsrate
print(cabbage:GetAttribute(attribute)) --> falsch, 3
end
-- Hören Sie auf Änderungen und verbinden Sie sich mit lokalen Funktionen
cabbage.Changed:Connect(onAnyPropertyChange)
cabbage.AttributeChanged:Connect(onAnyAttributeChange)
-- Hören Sie auf Änderungen und verbinden Sie sich mit anonymen Funktionen
cabbage:GetPropertyChangedSignal("Name"):Connect(function()
print(cabbage.Name) --> Kohl1
end)
cabbage:GetAttributeChangedSignal("GrowthRate"):Connect(function()
print(cabbage:GetAttribute("GrowthRate")) --> 3
end)
-- Feuer geändert und GetPropertyChangedSignal()
cabbage.Name = "Cabbage1"
-- Feuer geändert und AttributeChanged
cabbage:SetAttribute("Grow", false)
-- Feuer Ändern, AttributeÄndern und GetAttributeChangedSignal()
cabbage:SetAttribute("GrowthRate", 3)