Object
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
L'oggetto è la classe base per tutte le classi nella gerarchia di classe Roblox.Ogni altra classe che il motore Roblox definisce eredita tutti i membri di Object.Non è possibile creare direttamente l'Oggetto.
Sommario
Proprietà
Una stringa read-only che rappresenta la classe a cui questo Object appartiene.
Metodi
Ottieni un evento che si attiva quando una proprietà data dell'oggetto cambia.
Restituisce vero se la classe di un oggetto corrisponde o eredita da una classe data.
Eventi
Spedito immediatamente dopo che una proprietà dell'oggetto cambia, con alcune limitazioni.
Proprietà
ClassName
Una stringa read-only che rappresenta la classe a cui questo Object appartiene.
Questa proprietà può essere utilizzata con diverse altre funzioni che vengono utilizzate per identificare gli oggetti per inserisci / scrivi, come Object:IsA() o Instance:FindFirstChildOfClass() .
Nota che questa proprietà è solo letta e non può essere modificata dagli script.Gli sviluppatori che desiderano cambiare la classe di un oggetto dovranno invece creare un nuovo Object .
A differenza di Object:IsA(), ClassName può essere utilizzato per controllare se un oggetto appartenga a una classe specifica ignorando l'ereditarietà della classe. Ad esempio:
for _, child in workspace:GetChildren() doif child.ClassName == "Part" thenprint("Found a Part")-- will find Parts in model, but NOT TrussParts, WedgeParts, etcendend
Metodi
GetPropertyChangedSignal
Questo metodo restituisce un evento che si comporta esattamente come l'evento Changed, ad eccezione che si attiva solo quando la proprietà data cambia.In generale, è una buona idea usare questo metodo invece di una connessione a Changed con una funzione che controlla il nome della proprietà.Le successive chiamate a questo metodo sullo stesso oggetto con lo stesso nome di proprietà restituiscono lo stesso evento.
ValueBase oggetti, come IntValue e StringValue, utilizzano un evento modificato Changed che si attiva con i contenuti della loro ProprietàValue.Come tale, questo metodo fornisce un modo per rilevare le modifiche in altre proprietà di tali oggetti.
Nota che questo evento non passerà alcun argomento a una funzione connessa, quindi il valore della proprietà modificata deve essere letto direttamente all'interno di uno script.
Limitazioni
L'evento restituito da questo metodo non fa non fuoco per cambiamenti relativi alla fisica, come quando il , , , , o proprietà di un cambiamento dovuto alla gravità.Per rilevare i cambiamenti in queste proprietà, considera l'uso di un evento basato sulla fisica come RunService.PreSimulation .
Inoltre, l'evento restituito potrebbe non essere attivato per ogni modifica delle proprietà che cambia molto frequentemente, e/o potrebbe non essere attivato per tali proprietà tutti/tutte.Si consiglia di testare attentamente le modifiche di proprietà che influiscono sulla logica del gioco.
Parametri
La proprietà a cui connettersi.
Restituzioni
Un segnale che si attiva ogni volta che la proprietà cambia.
Campioni di codice
This code sample demonstrates how to save a value before a changed event fires on it in order to get more information about a change.
local part = Instance.new("Part")
local currentColor = part.BrickColor
local function onBrickColorChanged()
local newColor = part.BrickColor
print("Color changed from", currentColor.Name, "to", newColor.Name)
currentColor = newColor
end
part:GetPropertyChangedSignal("BrickColor"):Connect(onBrickColorChanged)
part.BrickColor = BrickColor.new("Really red")
part.BrickColor = BrickColor.new("Really blue")
This code sample demonstrates the equivalence of the Changed event and event returned by GetPropertyChangedSignal.
local part = Instance.new("Part")
local function onBrickColorChanged()
print("My color is now " .. part.BrickColor.Name)
end
local function onChanged(property)
if property == "BrickColor" then
onBrickColorChanged()
end
end
part:GetPropertyChangedSignal("BrickColor"):Connect(onBrickColorChanged)
part.Changed:Connect(onChanged)
-- Trigger some changes (because we connected twice,
-- both of these will cause two calls to onBrickColorChanged)
part.BrickColor = BrickColor.new("Really red")
part.BrickColor = BrickColor.new("Institutional white")
IsA
IsA restituisce vero se la classe dell'oggetto è equivalente a o una sottoclasse di una classe data.Questa funzione è simile agli operatori ⇒ in altri linguaggi e è una forma di introspezione di tipo.Per ignorare l'ereditarietà di classe, testa direttamente la proprietà ClassName invece.Per controllare i tipi di dati Luau nativi (number, Stringa, ecc) utilizza le funzioni type e typeof.
Più comunemente, questa funzione viene utilizzata per testare se un oggetto è una sorta di parte, come Part o WedgePart , che eredita da BasePart (una classe astratta).Ad esempio, se il tuo obiettivo è quello di cambiare tutti i membri di un personaggio dello stesso colore, potresti usare GetChildren per itterare sui figli, quindi usare IsA per filtrare gli oggetti non BasePart che mancano della ProprietàBrickColor:
local Players = game:GetService("Players")
local function paintFigure(character, color)
-- Iterare sugli oggetti figli del personaggio
for _, child in character:GetChildren() do
-- Filtri fuori gli oggetti non parte, come camicia, pantaloni e umanoidi
-- R15 utilizza MeshPart e R6 utilizza Part, quindi utilizziamo BasePart qui per rilevare entrambi:
if child:IsA("BasePart") then
child.BrickColor = color
end
end
end
paintFigure(Players.Player.Character, BrickColor.new("Bright blue"))
Poiché tutte le classi ereditano da Object, chiamare object:IsA("Object") restituirà sempre vero.
Parametri
La classe contro cui sarà controllata la classe dell'Oggetto. Sensibile al caso.
Restituzioni
Descrive se la classe dell'oggetto corrisponde o è una sottoclasse della classe data.
Campioni di codice
Demonstrates determining the class of Workspace using Instance:IsA()
Workspace is of class 'Workspace', so the first statement is true. Workspace is not of class 'BasePart', so the second statement is false. Workspace inherits from Instance and therefore is of class 'Instance', so the third statement is true.
local Workspace = game:GetService("Workspace")
print(Workspace:IsA("Workspace")) -- true
print(Workspace:IsA("BasePart")) -- false
print(Workspace:IsA("Instance")) -- true
Eventi
Changed
Questo evento si attiva immediatamente dopo che una proprietà dell'oggetto è stata modificata e funziona con la maggior parte dei casi d'uso (vedi limitazioni qui sotto).Il nuovo valore di una proprietà modificata non è non passato come parametro, quindi deve essere accessato utilizzando object[property] .Ad esempio:
object.Changed:Connect(function(property)
print("The new property's value is", object[property])
end)
Se sei interessato solo ad ascoltare il cambiamento di una Proprietà, considera di utilizzare il metodo GetPropertyChangedSignal() invece.
Per ValueBase oggetti come IntValue e StringValue , questo evento si attiva solo quando la proprietà dell'oggetto cambia in Value.Per rilevare altre modifiche negli oggetti ValueBase , usa GetPropertyChangedSignal() invece.
Limitazioni
Questo evento non fa fuoco per cambiamenti relativi alla fisica, come quando il CFrame , AssemblyLinearVelocity , AssemblyAngularVelocity , Position , o Orientation proprietà di un cambiamento di BasePart a causa della gravità.Per rilevare i cambiamenti in queste proprietà, considera l'uso di un evento basato sulla fisica come RunService.PreSimulation .
Inoltre, questo evento potrebbe non essere attivato per ogni modifica delle proprietà che cambia molto frequentemente, e/o potrebbe non essere attivato per tali proprietà tutti/tutte.Si consiglia di testare attentamente le modifiche di proprietà che influiscono sulla logica del gioco.
Parametri
Il nome della proprietà che è cambiata.
Campioni di codice
This sample demonstrates the subtleties of the Changed event on normal objects and "-Value" objects.
-- Demonstrate the Changed event by creating a Part
local part = Instance.new("Part")
part.Changed:Connect(print)
-- This fires Changed with "Transparency"
part.Transparency = 0.5
-- Similarly, this fires Changed with "Number"
part.Name = "SomePart"
-- Since changing BrickColor will also change other
-- properties at the same time, this line fires Changed
-- with "BrickColor", "Color3" and "Color3uint16".
part.BrickColor = BrickColor.Red()
-- A NumberValue holds a double-precision floating-point number
local vNumber = Instance.new("NumberValue")
vNumber.Changed:Connect(print)
-- This fires Changed with 123.456 (not "Value")
vNumber.Value = 123.456
-- This does not fire Changed
vNumber.Name = "SomeNumber"
-- A StringValue stores one string
local vString = Instance.new("StringValue")
vString.Changed:Connect(print)
-- This fires Changed with "Hello" (not "Value")
vString.Value = "Hello"
This code sample demonstrates the Changed event firing within a parent object.
local object = script.Parent
local function onChanged(property)
-- Get the current value of the property
local value = object[property]
-- Print a message saying what changed
print(object:GetFullName() .. "." .. property .. " (" .. typeof(value) .. ") changed to " .. tostring(value))
end
object.Changed:Connect(onChanged)
-- Trigger a simple change in the object (add an underscore to the name)
object.Name = "_" .. object.Name