プロパティとアトリビューション

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

エクスペリエンスをインタラクティブにすると、オブジェクトプロパティと属性を操作することがあります:

  • プロパティはオブジェクトクラスの一部です。たとえば、BasePart.Anchored プロパティは、部品の物理を制御します。トラックとフィールドエクスペリエンスで、ディスクまたはジャベリンを即座にアンカーして、プレイヤーが視覚的な示示を持って、部品がどれくらい遠くにあるかを追跡できます。

  • 属性は、基本的に定義したカスタムプロパティです。たとえば、植物 参照プロジェクトは、属性を使用して種の購入価格を設定し、ポットが持つことのできる最大植物サイズを設定します。

レプリケーションオーダー

オブジェクトを取得し、操作する前に、レプリケーションオーダーを理解する必要があります。

Roblox エンジンは、サーバーからクライアントにオブジェクトがどのようにレプリケートされるかを保証しません。これにより、クライアントスクリプトのオブジェクトにアクセスするために Instance:WaitForChild() メソッドが必須になります。ただし、プロセスの一部は予測可能です:

  1. クライアントは、ReplicatedFirst のコンテンツ、例えばロード画面、アセット、スクリプトをロードします。

  2. Class.LocalScript|LocalScripts (and Scripts with a RunContext of 0> Enum.RunContext.Client|Client0>) in LocalScripts3> run. These scripts can safely get objects from


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

これらのスクリプトは、他の サービス からオブジェクトを安全に取得できません、因みに、まだ読み込まれていない可能性があります:


-- 安全でない
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PickupManager = require(ReplicatedStorage.PickupManager)

あなた これらのスクリプトで WaitForChild() を使用して、他のサービスからオブジェクトを取得できますが、これを大幅に減少することにより、ReplicatedFirst の利点が大幅に減少します。

  1. クライアントはエクスペリエンスの残りをロードし続けます。

  2. 終了すると、game.Loaded イベントが発動し、game:IsLoaded() が真実に返されます。

  3. LocalScripts を StarterPlayerScripts で実行すると、クライアント Scripts も 0> Class.ReplicatedStorage0> で安全にオブジェクトを取得できます。これらのスクリプトは LocalScripts3>

  4. プレイヤーの Character モデルはエクスペリエンスで生成されます。

  5. LocalScriptsStarterCharacterScripts で実行します。

エクスペリエンスが インスタンスストリーミングを使用する (Workspace.StreamingEnabled ) を使用している場合、ワークスペースのオブジェクトの多くは読み込まれていない可能性があり、WaitForChild() を使用してワー

オブジェクトを取得する

オブジェクトプロパティと属性を変更するための第一歩は、オブジェクトに参照を取得することです。最も簡単なソリューションは、スクリプトを Explorer の子として作成し、script.Parent を使用してオブジェクトに参照することです。

A script parented to a model in the Explorer.

local sign = script.Parent

より一般的な解決方法は、Class.Instance:FindFirstChild() やInstance:FindFirstChild() などのメソッドを使用してオブジェクトを取得することです。

A Model within a Folder in ReplicatedStorage.

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

プロパティの変更

プロパティは簡単にアクセスできます — オブジェクトの参照後に . を使用してください — ただし、モデルで作業している場合は、個々のパーツをモデル自体よりも選択する必要があります。

A Model within ReplicatedStorage.

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

アトリビューションの作成

プロパティをプログラマチックに作成できますが、最も一般的なソリューションは、Studio ユーザーインターフェイスでデフォルトの値で作成することです。その後、スクリプトを使用してプレイヤーのアクションに応答してプラパティを変更できます。

A script within a folder in ReplicatedStorage.

For information on creating attributes in Studio, see インスタンスアトリビューション .

アトリビューションを設定する

属性の値を変更するには、Instance:SetAttribute() を名前と値で呼び出します。

アトリビュートを作成または変更

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

アトリビュートが存在しない場合は、このメソッドはそれを作成します。

特性値を取得する

既存の属性の値を取得するには、Instance:GetAttribute() をインスタンスで呼び出します。

属性値を取得

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

同様に、Instance:GetAttributes() を呼び出すことですべての属性を取得できます。このメソッドは、キー値のペアの辞書を返します。

すべての属性を取得

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

アトリビューションを削除する

アトリビュートを削除するには、その値を n に設定します。

アトリビューションを削除

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

変更を検知する

プロパティと属性の変更を聞くためには、いくつかの方法があります:

  • イベント Instance.Changed は、変更を任意のプロパティ (包括属性) に対して聞きます および、変更されたプロパティの名前をパラメーターとして渡します。

  • イベント Instance.AttributeChanged は、変更されたアトリビュートにリストを聞き、変更されたアトリビュートの名前をパラメーターとして渡します。

  • Class.Instance:GetPropertyChangedSignal() メソッドは、1つのプロパティの変更をリスニングし、パラメーターを渡さないようにします。

  • Class.Instance:GetAttributeChangedSignal() メソッドは、1つの属性の変更をリスニングし、パラメーターを渡さない。

これらのイベントとメソッドがパラメーターとして渡す最小限の情報により、Instance:GetPropertyChangedSignal() およびInstance:GetAttributeChangedSignal() など、すべてが匿名の機能に最適です。イベント に関する詳細は、1> イベント1> を参照してください。

変更を聞く

local cabbage = script.Parent
-- ローカル関数
local function onAnyPropertyChange(property)
-- アトリビューションの変更を無視する
if property ~= "Attributes" then
print(property) --> 名前
print(cabbage[property]) --> キャベツ1
end
end
local function onAnyAttributeChange(attribute)
print(attribute) --> 成長、成長率
print(cabbage:GetAttribute(attribute)) --> false、3
end
-- 変更を聞き、ローカル機能に接続します
cabbage.Changed:Connect(onAnyPropertyChange)
cabbage.AttributeChanged:Connect(onAnyAttributeChange)
-- 変更を聞き、匿名の関数に接続します
cabbage:GetPropertyChangedSignal("Name"):Connect(function()
print(cabbage.Name) --> キャベツ1
end)
cabbage:GetAttributeChangedSignal("GrowthRate"):Connect(function()
print(cabbage:GetAttribute("GrowthRate")) --> 3
end)
-- 変更後のファイアを取得し、GetPropertyChangedSignal()
cabbage.Name = "Cabbage1"
-- 変更されたファイアとアトリビュート変更
cabbage:SetAttribute("Grow", false)
-- ファイア変更、AttributeChanged 、GetAttributeChangedSignal()
cabbage:SetAttribute("GrowthRate", 3)