Object
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
オブジェクトは、Roblox クラス階層のすべてのクラスのベースクラスです。Roblox エンジンが定義する他のすべてのクラスは、オブジェクトのすべてのメンバーを継承します。オブジェクトを直接作成することはできません。
概要
方法
オブジェクトの指定のプロパティが変更されたときに発動するイベントを取得します。
オブジェクトのクラスが一致したり、指定のクラスから継承した場合は true を返します。
イベント
オブジェクトのプロパティが変更されてすぐに解雇され、いくつかの制限があります。
プロパティ
ClassName
この Object に属するクラスを表す読み込み専用の文字列。
このプロパティは、Object:IsA() または Instance:FindFirstChildOfClass() など、オブジェクトをタイプで識別するために使用される他の多くの機能と一緒に使用できます。
このプロパティは読み込み専用であり、スクリプトによって変更できません。オブジェクトのクラスを変更したい開発者は、代わりに新しい Object を作成する必要があります。
Object:IsA() とは異なり、ClassName はオブジェクトが特定のクラスに属しているかどうかをチェックするために使用できます。たとえば:
for _, child in workspace:GetChildren() doif child.ClassName == "Part" thenprint("Found a Part")-- will find Parts in model, but NOT TrussParts, WedgeParts, etcendend
方法
GetPropertyChangedSignal
このメソッドは、指定されたプロパティが変更されるときにのみ発動するのを除き、Changed イベントと同じように動作するイベントを返します。一般的に、このメソッドを使用して、プロパティ名をチェックする機能で Changed に接続するのではなく、このメソッドを使用するのが良い考えです。同じプロパティ名を持つ同じオブジェクトでこのメソッドに後続の呼び出しは、同じイベントを返します。
ValueBase オブジェクト、例えば IntValue や StringValue は、自分の Changed プロパティの内容で発動する修正された Value イベントを使用します。そのため、このメソッドは、それらのオブジェクトの他のプロパティの変更を検出する方法を提供します。
このイベントは接続された関数に引数を渡さないため、変更されたプロパティの値はスクリプト内で直接読み込まなければなりません。
制限
このメソッドで返されたイベントは、 火災せず 物理に関連する変更、例えば、 、 、 、 、または プロパティの重力による変更のようなものを発射しません。これらのプロパティの変更を検出するには、RunService.PreSimulation のような物理ベースのイベントを使用することを検討してください。
さらに、返されたイベントは、非常に頻繁に変更されるプロパティのすべての修正に発射しない可能性があり、またはそのようなプロパティに対して全く発射しない可能性があります。ゲームロジックに影響を与えるプロパティ変更を注意深くテストすることをお勧めします。
パラメータ
接続するプロパティ。
戻り値
プロパティが変更されるたびに発射するシグナル。
コードサンプル
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 は、オブジェクトのクラスが と同等である または特定のクラスの サブクラス である場合、真を返します。この機能は、他の言語の instanceof オペレーターと似ており、タイプのイントロジェクション の形式です。クラスの継承を無視するには、ClassName プロパティを直接テストしてください。ネイティブの Luau データタイプ (数、文字列など) をチェックするには、type および typeof の関数を使用します。
一般的に、この機能はオブジェクトが何らかのパーツかどうかをテストするために使用され、Part または WedgePart など、BasePart から継承される抽象クラスです。たとえば、目標がすべてのキャラクターの肢を同じ色に変更することである場合、GetChildren を使用して子供をループし、BasePart プロパティが欠落している非BrickColor オブジェクトをフィルターするために IsA を使用するかもしれません:
local Players = game:GetService("Players")
local function paintFigure(character, color)
-- キャラクターの子オブジェクトを反復する
for _, child in character:GetChildren() do
-- シャツ、パンツ、ヒューマノイドなどの非パーツオブジェクトをフィルターアウト
-- R15 はメッシュパーツを使用し、R6 はパーツを使用しますので、ここでベースパーツを使用して両方を検出します:
if child:IsA("BasePart") then
child.BrickColor = color
end
end
end
paintFigure(Players.Player.Character, BrickColor.new("Bright blue"))
すべてのクラスが Object から継承しているので、object:IsA("Object") を呼び出すと常に真が返されます。
パラメータ
オブジェクトのクラスに対してチェックされるクラスのクラス。大文字と小文字は区別されます。
戻り値
オブジェクトのクラスが一致したか、または指定されたクラスのサブクラスかどうかを説明します。
コードサンプル
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
イベント
Changed
このイベントは、オブジェクトのプロパティが変更されてからすぐに発動し、ほとんどの使用ケースで機能します(下の制限を参照)。変更されたプロパティの新しい値は パラメータとして渡されていない ので、object[property] を使用してアクセスする必要があります。例えば:
object.Changed:Connect(function(property)
print("The new property's value is", object[property])
end)
1つの特定のプロパティの変更を聞くだけに興味がある場合は、代わりに GetPropertyChangedSignal() メソッドを使用することを検討してください。
For ValueBase オブジェクト (IntValue や StringValue など) の場合、このイベントはオブジェクトの Value プロパティが変更されるときにのみ発動します。ValueBase オブジェクトの他の変更を検出するには、代わりに GetPropertyChangedSignal() を使用します。
制限
このイベントは、 物理に関連する変更、例えば、 、 、 、 、または プロパティの変更による重力による変更を発射しません。これらのプロパティの変更を検出するには、RunService.PreSimulation のような物理ベースのイベントを使用することを検討してください。
さらに、このイベントは、非常に頻繁に変更されるプロパティのすべての修正に発火しない可能性があり、またはそのようなプロパティに対して全く発火しない可能性があります。ゲームロジックに影響を与えるプロパティ変更を注意深くテストすることをお勧めします。
パラメータ
変更されたプロパティの名前。
コードサンプル
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