ReplicatedFirst はRobloxのサービスで、一部のスクリプトやアセットをクライアント(プレーヤーのデバイス)に最初にロードするために使われます。このサービスの主な用途は、ゲームの初期ロード画面やロード中のアニメーションなど、ゲームが完全にロードされる前に表示したいコンテンツを管理することです。
通常、Robloxゲームはクライアントとサーバーの間でアセットやスクリプトを自動的に複製します。しかし、この自動複製プロセスは順序が保証されないため、一部のコンテンツが他のコンテンツよりも早くロードされることを保証するためには、ReplicatedFirstサービスを使用する必要があります。
ReplicatedFirst内のスクリプトは、他の全てのスクリプトよりも先に実行されます。これは特にローカルスクリプトに重要で、ReplicatedFirst 内のローカルスクリプトは、StarterGui や StarterPlayerScripts 内のスクリプトよりも先に実行されます。
クライアントの処理になりますので ReplicatedFirst は、必然的に LocalScript になります。ゲームに入った際に、ReplicatedStorage の Assets フォルダに入れた各種アセットをロードする様子を表示するプログラムを作成してみました。
- ReplicatedFirst にLocalScriptを追加し、下記のプログラムを入力します。
- さらにそのスクリプトの下に ScreenGui し、名前をStartScreenGuiに変更します。
(一度 StarterGui の中で作成し、完成後にLocalScriptの下に移動させるのがベスト) - ScreenGui の中に Frame を、さらにその下に TextLabel を入れます。
- ReplicatedStorage に Assets というフォルダを作成し、各種アセットを入れておきます。
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ContentProvider = game:GetService("ContentProvider")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local screenGui = script.StartScreenGui:Clone()
-- デフォルトのローディング画面を削除
ReplicatedFirst:RemoveDefaultLoadingScreen()
if not game:IsLoaded() then
game.Loaded:Wait()
end
-- ReplicatedStorage の Assets フォルダにロードするアセットをいれておく
local assets = ReplicatedStorage.Assets:GetChildren()
screenGui.Parent = playerGui
for i, asset in ipairs(assets) do
ContentProvider:PreloadAsync({ asset })
screenGui.Frame.TextLabel.Text = "Loading:"..i.."/"..#assets
wait()
end
screenGui:Destroy()
このプログラムでは、GUIを閉じるボタンが設置されていません。ローディング画面を飛ばしたいこともあると思いますので、キャンセルできるボタン等を設置した方がいいでしょう。