イベントは、エクスペリエンス内の起きることがあり、聞くことができ、応答することができるイベントです。多くの Roblox サービスとオブジェクトには、特定のアクションや変更に対して自動的に ファイア を発生させる内蔵イベントがあります。
たとえば、プレイヤーの Character が BasePart に触れると、自動的に Touched イベントが発生します。プレイヤーがあなたのエクスペリエンスに参加するたびに、 2>Class.Players.PlayerAdded2> イベントが発動します
イベントとクライアント-サーバーアーキテクチャの数が多すぎるために、Roblox スクリプトは常に イベントドライブ と呼ばれます。このアプローチは、多くの他のゲームエンジンと異なり、フレームごとにコードを実行することを強調します。
イベントに聞く必要はありません、また、イベントに応答するために何も行動を起動する必要はありません。しかし、イベントは発動し、利用可能です。イベントに応答するには、関数をそれに接続します。
機能をイベントに接続する
コードを実行するには、Connect() を使用して、イベントが発動するたびにコードを実行します。ほとんどのイベントは、BasePart.Touched イベントがパーツをタッチ
次のコードサンプルは、onPartTouched() という名前の関数をパーツの Class.BasePart.Touched イベントに接続する方法を示しています:
-- スクリプトがパーツに親付けされていることを仮定します
local part = script.Parent
-- 実行したい機能
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- 機能をパーツの Touched イベントに接続する
part.Touched:Connect(onPartTouched)
また、匿名関数 を親スコープで使用している場合、他の場所で関数を使用する必要がないようにイベントに接続できます。たとえば、このコードサンプルは、サービス の同様なサンプルからの気まずれなインターミディエーター関数を避けます:
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
local function saveProgress(character)
local position = character:FindFirstChild("HumanoidRootPart").Position
SaveManager.saveData(character, position)
end
-- キャラクターが削除されると、保存プログレスを呼び出す匿名関数
-- エクスペリエンス (この場合、プレイヤーが去るとき) から。
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
イベントから機能を分離する
Datatype.RBXScriptSignal.Connect()|Connect() メソッドは、RBXScriptConnection オブジェクトを返します。イベントに関数を接続するが、次回に関数を呼び出す必要がない( Datatype.RBXScriptConnection:Disconnect()|Disconnect
次のコードサンプルでは、Part.Touched イベントから関数を接続および解除する方法を示しています:
local part = workspace.Part
local targetPart = workspace.TargetPart
-- 接続のための空のプレースホルダー変数を宣言
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- 接続を切断する
connection:Disconnect()
end
end
-- 上記の関数をタッチイベントに接続する
connection = part.Touched:Connect(onPartTouched)
機能をイベントにのみ接続する必要がある場合—それは、イベントが発動するたびに機能のみを実行すること—機能の接続と解除をより便利にするために Once() メソッドを使用すること。
イベントが発動するのを待っています
特定のイベントが発動するまでスクリプトを実行したい場合は、Wait() メソッドを使用します。このメソッドは、イベントの引数を返し、後で変数に割り当てることができます:
local part = workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
他のイベントタイプ
バインド可能なイベントは、クライアント-サーバー境界の 同じ側面 でスクリプト間通信を可能にします。
リモートイベントは、クライアント-サーバー境界を クロス することができます。