ユーザーがエクスペリエンスに参加すると、Roblox はデータモデルで プレイヤー として表現します。オブジェクト には、ユーザーのユニバーサルな情報(ユーザーユーザーネーム、友達リスト、保存されたアバターキャラクター、Roblox のメンバーシップタイプ、およびプロパティ、メソッド、およびイベント)が含まれており、参加とエクスペリエンスから退出の間のユーザーのライフサイクルに影響を与える。
Players サービスには、エクスペリエンス内のすべての Player インスタンスが含まれています。それぞれの Player オブジェクトは、エクスペリエンスにおけるユーザーを表し、カスタマイズできるユーザーのエクスペリエンスの 4つの重要なコンテナを親とします:Backpack、StarterGear、PlayerGui、そしてPlayerScripts。
寿命
クライアントとサーバー側のスクリプトは、両方とも Players.PlayerAdded および Players.PlayerRemoved イベントに接続して、ライフサイクルの Player オブジェクトに対するアクションを実行できます。また、Player.CharacterAdded 、Player.CharacterRemoving 、および Humanoid.Died イベントに接続して、キャラクターがスポーンしたり、デスしたりするときにゲームプレイに関連するアクションを実行できます。
スクリプトを使用して、ユーザーが参加または退出するとデータを回収し保存するデータストアなどのサーバー関連サービスにアクセスします。クライアントが新しいユーザーに関連するゲームプレイインスタンスを作成および削除する必要がある場合は、ユーザーの統計をカスタムリーダーボードで表示する GUI ディスプレイなど、新しいユーザーに関連するローカルスクリプトを使用します。
ユーザー参加
クライアントがエクスペリエンスに接続すると、関連する Player オブジェクトが Players サービスにクローンされます。The Players.PlayerAdded は、エクスペリエンスに参加するユーザーを表します。いくつかの例の使用ケースには、ユーザーデータの読み込み、チームの割り当て、ユーザーのキャラクターの服衣装変更が含まれます。The Players.PlayerAdded イベントは、参加するユーザーの Player オブジェクトを通過し、データストアや RemoteEvent オブジェクトなど、他の関数を呼び出すときに使用できます。
参加時にユーザーデータをロードする
エクスペリエンスに参加するときにユーザーのデータをロードするには、Players.PlayerAdded イベントを Script で使用します。次の例 Script は、イベントを聞き、ユーザーのユーザーIDをデータストアのキーとして使用してユーザーのデータを取得しようとします。ユーザーデータを正常に取得した後、それを使用してユーザーの進捗状況と統計をロードできます。
local DataStoreService = game:GetService("DataStoreService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
game:GetService("Players").PlayerAdded:Connect(function(player)
local userId = player.UserId
-- データストアのキーを読む
local getSuccess, currentData = pcall(function()
return playerDataStore:GetAsync(userId)
end)
if getSuccess then
print(currentData)
end
-- 現在のデータでさらなるアクションを行う
end)
ユーザーが退出
クライアントがエクスペリエンスから切断されると、サーバーは関連する Player オブジェクトを Players サービスから破壊します。Players.PlayerRemoving イベントは、経験からユーザーが退出することを表します。いくつかの例の使用ケースには、ユーザーデータを保存し、スコアボードから統計を削除し、家などのモデルを破壊することが含まれます。The Players.PlayerRemoving イベントは、データストアや Player オブジェクトなど、他の関数を呼び出すときに使用できるユーザーの RemoteEvent オブジェクトを渡します。
イベントが Player.PlayerRemoving と呼ばれているのではなく Player.PlayerRemoved と呼ばれているのは、「削除」が既に Player オブジェクトが削除されており、それゆえスクリプトにアクセスできないことを示唆しているためです。
退出時にユーザーデータを保存する
エクスペリエンスを終了するときにユーザーのデータを保存するには、Players.PlayerRemoving イベントを Script で使用します。次の例 Script は、イベントを聞き、ユーザーのユーザーIDをデータストアのキーとして使用してユーザーのデータを保存しようとします。
ServerScriptService のスクリプト
local DataStoreService = game:GetService("DataStoreService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
game:GetService("Players").PlayerRemoving:Connect(function(player)
local userId = player.UserId
-- ゲームでプレイヤーのデータ状態を取得する
local currentData = getCurrentData(player)
-- データストアに保保管
local setSuccess, errorMessage = pcall(function()
playerDataStore:SetAsync(userId, currentData)
end)
if not setSuccess then
warn(errorMessage)
end
end)
キャラクタースポーン
ユーザーの Player.Character モデルは、彼らのアバターを表現します。デフォルトでは、Player.CharacterAutoLoads が真になっており、ユーザーのキャラクタモデルは自動的に体験に参加すると生成されます。if Player.CharacterAutoLoads が false である場合、キャラクターを手動でスポーンするには Player:LoadCharacter() を呼び出す必要があります。
ユーザーの Player.Character がスポーンすると、スクリプトとローカルスクリプトが StarterCharacterScripts にクローンされ、Player.CharacterAdded イベントが発動します。イベント Player.CharacterAdded は、新しいキャラクタモデルをすべてのイベントリスナーにパスし、これを使用してキャラクタの Humanoid オブジェクトを見つけ、その動作を変更できます。たとえば、Humanoid:ApplyDescription() を使用してアバターの服装を変更し、Humanoid.WalkSpeed または Humanoid.JumpHeight を使用してアバターの動作を変更できます。
キャラクターのデスポーン
プレイヤーの Humanoid が死亡すると、その身体部分が地面に落ち、Humanoid.Died イベントが発動します。サーバーは、Players.Respawntime プロパティが決定した時間後に、キャラクタモデルとその内のスクリプトを自動的に削除します。Player.CharacterRemoving イベントを使用して、キャラクターに関連する他のオブジェクトをリセットできます、例えば、運転していた車両のネットワーク所有権など。
プレイヤーの死亡をカウントする
Humanoid.Died イベントを使用して、キルのスコアリングを処理したり、カスタムラグドールモデルを作成したりできます。次の Script は、各ユーザーのキャラクターモデルを取得するために Player.CharacterAdded に接続し、その後、キャラクターの Humanoid オブジェクトに接続します。ヒューマノイドの Humanoid.Died イベントが発動すると、スクリプトはユーザーのヒューマノイドが死んだ回数を増加させ、その数を出力します。
ServerScriptService のスクリプト
game:GetService("Players").PlayerAdded:Connect(function(player)
local deaths = 0
player.CharacterAdded:Connect(function(character)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
deaths += 1
print(player.Name .. " death count: " .. deaths)
end)
end)
end)
ユーザーを禁止
エクスペリエンスでの礼儀と公平なプレイを保証するには、エクスペリエンスのルールとコミュニティガイドラインに違反するユーザーを禁止できます。禁止期間、禁止メッセージ、および潜在的な代替アカウントにまで禁止を拡大できます。この機能を使用するときは、禁止とメッセージングのガイドラインにも従わなければなりません。
実装と使用の指示については、Players.BanAsync を参照してください。
禁止ガイドライン
エクスペリエンスで禁止を実装するときは、次のガイドラインに従います:
- エクスペリエンスルールは、Roblox の コミュニティ標準 と 利用規約 に反してはならない。
- たとえば、性別により誰かを排除するエクスペリエンスルールを作成できないため、Roblox の差別、誹謗、憎悪の発言ポリシー に違反しているためです。
- クリエイターは、すべてのユーザーにアクセス可能な場所に、自分の経験ルールを明確に記述する必要があります。
- クリエイターは、自分の経験ルールを公平に適用し、特定のユーザーを随意的にターゲットにする必要はありません。
- ユーザーは、禁止が間違っていたと信じるなら、直接クリエイターに訴えることができます。
- ユーザーがクリエイターの経験ルールやルールの違反が コミュニティ基準 に違反すると信じていない限り、Roblox はこれらの上告を仲裁しません。
- Roblox は、クリエイターの経験ルールやそのルールの適用が コミュニティ基準 に違反していると信じる理由がある場合、経験をモデレートできます。
メッセージガイドライン
ユーザーが禁止されると、禁止期間や理由などの情報を表示するエラーモードが表示されます。テキストフィルターされたメッセージでは、Roblox の コミュニティ標準 を満たしている限り、アピールまたは連絡情報などの追加情報を含めることができます。
たとえば、禁止メッセージでは、ブランド名とプラットフォームを参照することが許可されています:
- 「グループ/エクスペリエンスページで Discord を訪問」
- 「Twitter または X でメッセージを送信」
このメッセージフィールドには、個人情報または直接リンクの言及は許可されていません。これには、特定のユーザー名またはハンドルを投稿するか、Discord サーバーまたは X アカウントへの直リンクを提供することが含まれます。
コンテナ
Player オブジェクトは、複数の重要なコンテナを保存します:
バックパック
Player.Backpack コンテナは、ユーザーのインベント持ち物リスト保存します。ユーザーの Tool ディスプレイのインベントリの底にあるユーザーの Backpack オブジェクト。ユーザーがインベント持ち物リストから Tool を選択すると、それを装備し、Player.Backpack から Player.Character に移動します。
ユーザーの Player.Character が生成されると、StarterPack サービスのコンテンツとその Player.StarterGear クローンが、Player.Backpack に生成されます。キャラクターが死亡すると、クライアントはその Backpack を破壊し、新しいものに置き換えます。
The Backpack も、クライアントとサーバーの両方がアクセスできる Scripts と LocalScripts を保アクセス, 書き込み権限 (write access)して実行します。
Roblox は、プレイヤーが画面の下部にある Backpack およびインベントリにアクセスするインターフェイスを提供します。デフォルトの Roblox バックパックGUIを無効にして、自所有のものに置き換えるには、ローカルスクリプトで StarterGui:SetCoreGuiEnabled() を呼び出します。詳しくは、StarterGui を参照してください。
スターターギア
コンテナの StarterGear 内容は、キャラクターがスポーンすると、ユーザーの Player.Backpack にクローンされます。さらに、場所がギアを許可し、ユーザーがギアを所有している場合、スポーン時に Tool 彼らのギアクローンの Player.StarterGear オブジェクトが生成されます。
StarterPack とは異なり、Player.StarterGear はサービスではなく、それぞれの Player オブジェクトの子であるため、その内容はユーザー固有です。各ユーザーは、自分の 内で異なるオブジェクトを持つことができます。Player.StarterGear を使用するには、 権限 の下でエクスペリエンスの設定ページでギアを有効にします。権限ページでは、タイプによってギアを有効にすることができます。ギアを無効にするには、そのタイプを選択解除します。
ギアを追加してゲームを常にテストして、ユーザーがそこで簡単に悪用できないかどうかをチェックします。ギアには Script オブジェクトが含まれており、プレイヤーが考えられないアクションを実行できるようにします。たとえば、ナビゲーションギアは、プレイヤーがアクセスしたくないマップの一部にアクセスできるようにすることができます。武器は、装備を持つプレイヤーが他のプレイヤーにダメージを与えることを可能にし、懲罰や報復なしでもあります。
プレイヤーGUI
PlayerGui コンテナは、プレイヤーの GUI を作成するオブジェクトを保存します。スクリーンGUI が PlayerGui の子孫である場合、スクリーンGUI 内の任意の GuiObject がプレイヤーの画面に表示されます。どれでも LocalScript は、PlayerGui にクローンするときに実行します。プレイヤーの Player.Character が最初にスポーンすると、StarterGui のすべてのコンテンツが自動的にプレイヤーの PlayerGui にコピーされます。
プレイヤー.キャラクター自動ロードが false に設定されている場合、キャラクターは生成されず、 コンテンツは呼び出されるまでコピーされません。If StarterGui.ResetPlayerGuiOnSpawn が真に設定されている場合、プレイヤーのキャラクターが再スポーンするたびに、そのプレイヤーの PlayerGui のすべてのコンテンツがクリアされ、StarterGui のコンテンツに置き換えられます。
プレイヤースクリプト
ユーザーがエクスペリエンスに参加すると、StarterPlayer.StarterPlayerScripts コンテナ内のコンテンツが PlayerScripts にクローンされます。ローカルスクリプトとモジュールスクリプトは、クローン時に実行されます。
Backpack および PlayerGui コンテナとは異なり、PlayerScripts コンテナはサーバーにアクセスできません、およびユーザーの PlayerScripts コンテナは、キャラクターが死亡してリスポーンするとリセットされません。サーバー側の オブジェクトも、親になったときに実行されません。PlayerScripts コンテナは、一般的なチャットシステムやプレイヤーの入力操作御など、ユーザーのキャラクターライフサイクルに結び付いていないスクリプトに便利です。