イベントは、あなたが聞き取って応答できるエクスペリエンス内の出来事です。多くの Roblox サービスやオブジェクトには、特定のアクションや変更に対して自動的に 発射 するイベントが組み込まれています。
たとえば、プレイヤーの Character が BasePart に触れると、自動的に Touched イベントが発動します。プレイヤーがエクスペリエンスに参加するたびに、Players.PlayerAdded イベントが発動します。
イベントとクライアント-サーバーアーキテクチャの数が多すぎるため、Roblox のスクリプトは イベント駆動 としばしば呼ばれます。このアプローチは、フレームごとのベースでコードを実行する他の多くのゲームエンジンと異なります。
イベントを聞いたり、応答して何か行動を起こす必要はありませんが、イベントは発射し、それでも利用可能です。イベントに応答したいときは、機能をそれに接続します。
機能をイベントに接続する
Connect() を使用して機能をイベントに接続し、イベントが発動するたびにコードを実行します。ほとんどのイベントは、接続された機能に引数をパスします。たとえば、BasePart.Touched イベントは、部品に触れたオブジェクト (例: 左手または車輪) をパスし、Players.PlayerAdded イベントは、あなたの経験に参加した Player をパスします。
次のコードサンプルは、onPartTouched() という機能をパーツの Touched イベントに接続する方法を示しています:
-- スクリプトがパーツに親属していると仮定する
local part = script.Parent
-- 実行したい機能
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- 機能をパーツのタッチイベントに接続する
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
-- キャラクターが削除されたときに saveProgress() を呼び出す無記名関数
-- 経験から (この場合、プレイヤーが退出するとき)。
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
イベントから機能を切断する
Connect() メソッドは、RBXScriptConnection オブジェクトを返します。機能をイベントに接続しても、次回イベントが発動するときに機能を呼び出さないようにするには、RBXScriptConnection オブジェクトに Disconnect() を呼び出して、切断します。
次のコードサンプルでは、Part.Touched イベントから機能を接続して切断する方法を示します:
local Workspace = game:GetService("Workspace")
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 Workspace = game:GetService("Workspace")local part = Workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
他のイベントの種類
バインド可能イベントでは、クライアント-サーバー境界の同じ側で スクリプト間でコミュニケーションすることができます 。
リモートイベントでは、クライアント-サーバー境界を越えて 通信できます 。